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