Signatur
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;
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;
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;
}
// 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.