Start · Sprachen · PHP · Referenz · IntlTimeZone

IntlTimeZone

Klasse

Repräsentiert eine Zeitzone in der intl-Erweiterung und ermöglicht präzise Zeitzonenverwaltung gemäß dem Unicode/ICU-Standard.

seit PHP 5.5.0 Kategorie: string

Signatur

class IntlTimeZone

Beschreibung

IntlTimeZone ist eine PHP-Klasse aus der Internationalisierungserweiterung (intl), die auf der ICU-Bibliothek basiert. Sie kapselt Zeitzoneninformationen nach dem Unicode Common Locale Data Repository (CLDR) und stellt Methoden bereit, um Zeitzonenoffsets, Sommerzeit-Regeln und Zeitzonenbezeichner zu verwalten.

Im Unterschied zur eingebauten PHP-Klasse DateTimeZone unterstützt IntlTimeZone erweiterte Zeitzonenregeln, historische DST-Übergänge sowie alle von ICU unterstützten Zeitzonenbezeichner (z. B. America/New_York, Europe/Berlin oder GMT-Offsets). Instanzen dieser Klasse werden häufig zusammen mit IntlCalendar und IntlDateFormatter verwendet, um locale-bewusste Datums- und Zeitoperationen durchzuführen.

IntlTimeZone-Objekte können nicht direkt mit new instanziiert werden. Stattdessen werden sie über statische Factory-Methoden wie IntlTimeZone::createTimeZone(), IntlTimeZone::createDefault() oder IntlTimeZone::fromDateTimeZone() erzeugt. Die Klasse erlaubt auch den Vergleich von Zeitzonen und die Abfrage aller verfügbaren Zeitzonenbezeichner über IntlTimeZone::createEnumeration().

Typische Einsatzgebiete sind internationale Anwendungen, die korrekte DST-Behandlung, Zeitzonenkonvertierungen oder die Anzeige von Datumsangaben in verschiedenen Regionen der Welt erfordern.

Beispiele

Zeitzone erstellen und Offset abfragen

<?php
// IntlTimeZone-Objekt für Berlin erstellen
$tz = IntlTimeZone::createTimeZone('Europe/Berlin');

echo 'ID: ' . $tz->getID() . PHP_EOL;

// Rohoffset (ohne DST) in Millisekunden
$rawOffset = $tz->getRawOffset();
echo 'Rohoffset: ' . ($rawOffset / 3600000) . ' Stunden' . PHP_EOL;

// Aktuellen Offset (inkl. DST) zum Unix-Timestamp 0 ermitteln
$offset = 0;
$dst    = 0;
$tz->getOffset(0, false, $offset, $dst);
echo 'Offset: '  . ($offset / 3600000) . ' h, DST: ' . ($dst / 3600000) . ' h' . PHP_EOL;
ID: Europe/Berlin Rohoffset: 1 Stunden Offset: 1 h, DST: 0 h

Konvertierung zwischen IntlTimeZone und DateTimeZone

<?php
// PHP-eigenes DateTimeZone-Objekt
$dtz = new DateTimeZone('America/New_York');

// Konvertierung zu IntlTimeZone
$intlTz = IntlTimeZone::fromDateTimeZone($dtz);
echo 'IntlTimeZone ID: ' . $intlTz->getID() . PHP_EOL;

// Zurückkonvertieren zu DateTimeZone
$backToDtz = $intlTz->toDateTimeZone();
echo 'DateTimeZone Name: ' . $backToDtz->getName() . PHP_EOL;

// Anzeige des Anzeigenamens (lokalisiert)
echo 'Anzeigename: ' . $intlTz->getDisplayName(false, IntlTimeZone::DISPLAY_LONG, 'de_DE') . PHP_EOL;
IntlTimeZone ID: America/New_York DateTimeZone Name: America/New_York Anzeigename: Nordamerikanische Ostküsten-Normalzeit

Alle verfügbaren Zeitzonen für eine Region auflisten

<?php
// Alle Zeitzonen für Europa aufzählen
$enumeration = IntlTimeZone::createEnumeration('DE');

$zones = [];
while ($id = $enumeration->current()) {
    $zones[] = $id;
    $enumeration->next();
}

echo 'Zeitzonen für DE:' . PHP_EOL;
foreach ($zones as $z) {
    echo '  ' . $z . PHP_EOL;
}
Zeitzonen für DE: Europe/Berlin Europe/Busingen

// Wichtig · Fallstricke

Keine direkte Instanziierung: new IntlTimeZone() ist nicht möglich. Verwende ausschließlich die bereitgestellten statischen Factory-Methoden (createTimeZone(), createDefault(), fromDateTimeZone(), getGMT(), getUnknown()).

ICU-Versionsabhängigkeit: Die verfügbaren Zeitzonenbezeichner und deren DST-Regeln hängen von der installierten ICU-Version ab. Es kann zu Abweichungen zwischen verschiedenen PHP-Installationen kommen, insbesondere bei Ländern, die ihre Zeitzonenregeln kürzlich geändert haben.

Ungültige Bezeichner: Wird ein unbekannter Zeitzonenbezeichner übergeben, gibt createTimeZone() eine "GMT+0"-Zeitzone zurück und keinen false-Wert oder eine Exception. Prüfe daher die zurückgegebene ID, um sicherzustellen, dass die gewünschte Zeitzone erkannt wurde.

Offsets in Millisekunden: Alle Offset-Methoden geben Werte in Millisekunden zurück (nicht Sekunden oder Stunden). Teile den Wert durch 3600000, um Stunden zu erhalten.