PHP-Funktion date_timezone_get()
Die PHP-Funktion date_timezone_get() gibt die Zeitzone eines DateTime-Objekts als DateTimeZone-Objekt zurück. Hier mit Beispielen erklärt.
Die Funktion date_timezone_get() gibt die Zeitzone zurück, die einem DateTime-Objekt zugeordnet ist, und zwar als DateTimeZone-Objekt. Zu wissen, welche Zeitzone ein Datum trägt, macht den Unterschied zwischen einem Zeitstempel, der „15 Uhr in New York" bedeutet, und einem, der „15 Uhr irgendwo undefiniert" bedeutet — ein falsches Handling ist eine der häufigsten Ursachen für Stunden-Fehler in PHP-Anwendungen.
Diese Seite behandelt die Signatur der Funktion, was sie zurückgibt (einschließlich bei Fehler), das objektorientierte Äquivalent, das in der Praxis häufiger vorkommt, sowie praktische Beispiele wie das Auslesen und Konvertieren einer Zeitzone.
Zeitzonenverwaltung in PHP
Eine Zeitzone ist eine geografische Region, die dieselbe Standardzeit verwendet. Jede Zeitzone wird durch einen eindeutigen IANA-Namen wie America/New_York oder Europe/London identifiziert. PHP wird mit der vollständigen IANA-Datenbank ausgeliefert; alle unterstützten Namen lassen sich mit timezone_identifiers_list() auflisten.
Jedes DateTime-Objekt trägt intern eine Zeitzone. Wenn keine angegeben wird, fällt es auf die Standard-Zeitzone des Skripts zurück — den Wert, der durch date_default_timezone_set() gesetzt wurde (oder andernfalls durch die date.timezone-Direktive in php.ini). Um die Zeitzone eines vorhandenen Objekts zu ändern, anstatt sie auszulesen, verwende date_timezone_set().
Ein wichtiger Punkt: date_timezone_get() konvertiert die Zeit nicht. Die Funktion gibt nur die aktuell am Objekt hängende Zeitzonenbezeichnung zurück. Um den tatsächlichen Uhrzeitwert in eine andere Zone zu verschieben, ändert man die Zeitzone mit setTimezone() / date_timezone_set().
Die Funktion date_timezone_get()
date_timezone_get() ist der prozedurale Alias der Methode DateTime::getTimezone(). Beide tun dasselbe — sie geben die DateTimeZone-Instanz zurück, die von einem DateTime- (oder DateTimeImmutable-) Objekt gehalten wird.
Syntax
date_timezone_get(DateTimeInterface $object): DateTimeZone|falseDas objektorientierte Äquivalent:
$object->getTimezone();Parameter
$object: EinDateTime- oderDateTimeImmutable-Objekt, aus dem die Zeitzone ausgelesen wird.
Rückgabewert
Bei Erfolg wird ein DateTimeZone-Objekt zurückgegeben. Bei Fehler (zum Beispiel wenn das Objekt keine Zeitzoneninformation trägt) wird false zurückgegeben. Rufe getName() auf dem Ergebnis auf, um den IANA-string wie "Europe/London" zu erhalten.
Beispiele
Hier sind einige Beispiele, wie die Funktion date_timezone_get() verwendet werden kann:
Beispiel 1: Zeitzone des aktuellen Datums und der aktuellen Uhrzeit auslesen
Ein DateTime-Objekt, das ohne explizite Zeitzone erstellt wird, erbt den Skript-Standard, sodass die Ausgabe hier dem entspricht, was an date_default_timezone_set() übergeben wurde — in diesem Beispiel UTC.
Beispiel 2: Zeitzone nach einer Änderung auslesen
Nachdem setTimezone() die Zone neu zugewiesen hat, gibt date_timezone_get() den neuen Wert zurück: America/New_York.
Beispiel 3: Offset auslesen und zwischen Zeitzonen konvertieren
Da date_timezone_get() ein vollständiges DateTimeZone-Objekt zurückgibt, kann es an andere zeitzonen-fähige Aufrufe weitergegeben werden — zum Beispiel um den UTC-Offset auszulesen oder einen Zeitpunkt von einer Zone in eine andere zu konvertieren:
<?php
// 9:00 AM in London on a summer date (BST, UTC+1)
$london = new DateTime('2023-07-01 09:00:00', new DateTimeZone('Europe/London'));
$tz = date_timezone_get($london);
echo $tz->getName(), "\n"; // Europe/London
echo $tz->getOffset($london) / 3600, "\n"; // 1 (hours east of UTC)
// Convert the same instant to Tokyo time
$london->setTimezone(new DateTimeZone('Asia/Tokyo'));
echo $london->format('Y-m-d H:i'), "\n"; // 2023-07-01 17:00Der Zeitpunkt ist identisch; nur die Darstellung der Uhrzeit ändert sich — Londons 09:00 BST entspricht Tokios 17:00 JST. Siehe date_format() für die oben verwendeten Formatierungszeichen.
Häufige Fallstricke
- Auslesen, nicht konvertieren.
date_timezone_get()gibt nur die zugeordnete Zeitzone zurück. Das Zuweisen des Ergebnisses an eine andere Variable ändert das Datum nicht — verwende dafürsetTimezone(). - Standard- vs. explizite Zeitzone. Ein Objekt, das ohne Zeitzone erstellt wurde, erbt den Skript-Standard. Wenn dieser Standard falsch ist, sehen alle Auslesevorgänge korrekt aus, aber die zugrunde liegende Zeit ist falsch. Setze die Zeitzone einmalig mit
date_default_timezone_set(). - In modernem Code die OOP-Form bevorzugen.
$object->getTimezone()ist derselbe Aufruf und lässt sich innerhalb von Methodenketten natürlicher lesen.
Fazit
date_timezone_get() gibt das DateTimeZone-Objekt zurück, das einem DateTime-Objekt zugeordnet ist, und liefert so den IANA-Namen sowie Werkzeuge zum Auslesen von Offsets oder zur Konvertierung zwischen Zeitzonen. Zusammen mit date_default_timezone_set() und date_timezone_set() ermöglicht es, Zeitstempel für Nutzer und Server in verschiedenen Teilen der Welt eindeutig zu halten.