Start · Sprachen · PHP · Referenz · intltz_from_date_time_zone

intltz_from_date_time_zone

Funktion

Erstellt ein <code>IntlTimeZone</code>-Objekt aus einem PHP-nativen <code>DateTimeZone</code>-Objekt.

seit PHP 5.5.0 Kategorie: string

Signatur

intltz_from_date_time_zone(DateTimeZone $timezone): IntlTimeZone|false

Beschreibung

intltz_from_date_time_zone() konvertiert ein PHP-eigenes DateTimeZone-Objekt in ein IntlTimeZone-Objekt der Internationalisierungs-Erweiterung (intl). Dies ist nützlich, wenn man zwischen der nativen PHP-Datums-API und der ICU-basierten intl-API wechseln möchte.

Die Funktion ist die prozedurale Variante der statischen Methode IntlTimeZone::fromDateTimeZone(). Beide Varianten liefern dasselbe Ergebnis und können je nach bevorzugtem Programmierstil eingesetzt werden.

Nicht alle DateTimeZone-Bezeichner lassen sich verlustfrei in eine IntlTimeZone überführen. Insbesondere UTC-Offset-Zeitzonen (wie +05:30) können abweichend interpretiert werden. Bei Fehlern oder nicht erkannten Zeitzonen gibt die Funktion false zurück.

Diese Funktion ist besonders dann sinnvoll, wenn man IntlDateFormatter, IntlCalendar oder ähnliche intl-Klassen nutzt, aber die Zeitzone als DateTimeZone vorliegt – etwa aus DateTime- oder DateTimeImmutable-Objekten.

Parameter

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

Rückgabewert

Typ
IntlTimeZone|false
Beschreibung
Gibt bei Erfolg ein IntlTimeZone-Objekt zurück. Kann bei nicht erkannten oder nicht konvertierbaren Zeitzonen false zurückgeben.

Beispiele

Einfache Konvertierung von DateTimeZone nach IntlTimeZone

<?php
$dtz = new DateTimeZone('Europe/Berlin');
$itz = intltz_from_date_time_zone($dtz);

if ($itz !== false) {
    echo $itz->getID(); // Gibt die IANA-Zeitzonkennung aus
} else {
    echo 'Konvertierung fehlgeschlagen';
}
Europe/Berlin

Verwendung mit IntlDateFormatter

<?php
$dtz = new DateTimeZone('America/New_York');
$itz = intltz_from_date_time_zone($dtz);

if ($itz !== false) {
    $formatter = new IntlDateFormatter(
        'de_DE',
        IntlDateFormatter::FULL,
        IntlDateFormatter::FULL,
        $itz
    );
    echo $formatter->format(new DateTime('2024-06-15 12:00:00', $dtz));
} else {
    echo 'Fehler bei der Zeitzonenkonvertierung';
}
Samstag, 15. Juni 2024 um 12:00:00 Ostamerikanische Sommerzeit

// Wichtig · Fallstricke

Achtung bei UTC-Offset-Zeitzonen: DateTimeZone-Objekte, die mit einem reinen Offset wie +02:00 erstellt wurden, werden von der intl-Erweiterung möglicherweise nicht korrekt erkannt oder liefern eine abweichende Darstellung. Es empfiehlt sich, stets benannte IANA-Zeitzonen (z. B. Europe/Berlin) zu verwenden.

Die Funktion setzt voraus, dass die intl-Erweiterung installiert und aktiviert ist. Fehlt sie, führt der Aufruf zu einem fatalen Fehler.

Die objektorientierte Entsprechung ist IntlTimeZone::fromDateTimeZone($dtz) — beide sind funktional äquivalent.