Start · Sprachen · PHP · Referenz · intltz_to_date_time_zone

intltz_to_date_time_zone

Funktion

Konvertiert ein <code>IntlTimeZone</code>-Objekt in ein äquivalentes <code>DateTimeZone</code>-Objekt.

seit PHP 5.5.0 Kategorie: string

Signatur

intltz_to_date_time_zone(IntlTimeZone $timezone): DateTimeZone|false

Beschreibung

intltz_to_date_time_zone() ist die prozedurale Entsprechung der Methode IntlTimeZone::toDateTimeZone() und wandelt ein ICU-basiertes IntlTimeZone-Objekt in ein natives PHP-DateTimeZone-Objekt um. Dies ermöglicht die Brücke zwischen der Internationalization Extension (intl) und der Standard-Datums-/Zeit-API von PHP.

Die Funktion ist dann besonders nützlich, wenn man Zeitzoneninformationen zunächst über die mächtige ICU-Bibliothek verarbeitet (z. B. für lokalisierte Zeitzonennamen oder CLDR-Daten) und das Ergebnis anschließend an Funktionen oder Klassen weitergibt, die ein DateTimeZone-Objekt erwarten, etwa DateTime oder DateTimeImmutable.

Nicht jede IntlTimeZone lässt sich verlustfrei in eine DateTimeZone konvertieren, da ICU über einen deutlich umfangreicheren Zeitzonenkatalog verfügt. Kann keine sinnvolle Entsprechung gefunden werden, gibt die Funktion false zurück.

Parameter

Name Typ Default Beschreibung
$timezone Pflicht IntlTimeZone Das IntlTimeZone-Objekt, das in ein DateTimeZone-Objekt umgewandelt werden soll.

Rückgabewert

Typ
DateTimeZone|false
Beschreibung
Gibt bei Erfolg ein DateTimeZone-Objekt zurück, das der übergebenen IntlTimeZone entspricht. Im Fehlerfall (z. B. wenn keine Entsprechung gefunden werden kann) wird false zurückgegeben.

Beispiele

Einfache Konvertierung einer Zeitzone

<?php
// IntlTimeZone anhand eines Bezeichners erstellen
$intlTz = IntlTimeZone::createTimeZone('Europe/Berlin');

// In DateTimeZone konvertieren
$dateTimeTz = intltz_to_date_time_zone($intlTz);

if ($dateTimeTz !== false) {
    echo $dateTimeTz->getName(); // Gibt den Zeitzonen-Bezeichner aus
} else {
    echo 'Konvertierung fehlgeschlagen.';
}
Europe/Berlin

Zeitzonenobjekt für DateTimeImmutable verwenden

<?php
// Zeitzone über IntlTimeZone ermitteln
$intlTz = IntlTimeZone::createTimeZone('America/New_York');

// In DateTimeZone umwandeln
$dateTimeTz = intltz_to_date_time_zone($intlTz);

if ($dateTimeTz !== false) {
    // DateTimeImmutable mit der konvertierten Zeitzone erstellen
    $dt = new DateTimeImmutable('now', $dateTimeTz);
    echo $dt->format('Y-m-d H:i:s T');
} else {
    echo 'Konvertierung fehlgeschlagen.';
}
2024-06-15 14:23:07 EDT

// Wichtig · Fallstricke

Verfügbarkeit: Diese Funktion steht nur zur Verfügung, wenn PHP mit der intl-Erweiterung kompiliert wurde. Andernfalls ist sie undefiniert und führt zu einem fatalen Fehler.

Verlustbehaftete Konvertierung: ICU kennt mehr Zeitzonen als PHP's natives DateTimeZone. Beim Konvertieren von selteneren oder systemeigenen ICU-Zeitzonen kann false zurückgegeben werden. Es empfiehlt sich daher, den Rückgabewert stets zu prüfen.

Die objektorientierte Alternative IntlTimeZone::toDateTimeZone() ist funktional identisch und kann je nach Stil bevorzugt werden.