timezone_open()
Die Funktion timezone_open() ist eine eingebaute PHP-Funktion, die ein neues DateTimeZone-Objekt erstellt. Sie akzeptiert einen Zeitzonenbezeichner.
Die PHP-Funktion timezone_open()
timezone_open() erstellt ein neues DateTimeZone-Objekt aus einem Zeitzonenbezeichner. Es handelt sich um den prozeduralen Alias von new DateTimeZone() — beide tun exakt dasselbe, sodass Sie den Stil verwenden können, der am besten zu Ihrem Code passt.
Ein DateTimeZone-Objekt allein „tut" nichts. Seine Aufgabe besteht darin, an ein DateTime-Objekt übergeben zu werden, damit Zeitstempel in der richtigen Zone interpretiert und angezeigt werden. Das macht timezone_open() nützlich: Es ermöglicht einem Skript, denselben Zeitpunkt für Benutzer in New York, Paris oder Tokio korrekt darzustellen.
Syntax
timezone_open(string $timezone): DateTimeZone|falseParameter
$timezone— ein Zeitzonenbezeichner. Verwenden Sie einen vollständigen IANA-Namen wie"America/New_York","Europe/Paris"oder"UTC". Abkürzungen wie"EST"werden akzeptiert, sind jedoch mehrdeutig und sollten möglichst vermieden werden. Die vollständige Liste lieferttimezone_identifiers_list().
Rückgabewert
- Ein
DateTimeZone-Objekt bei Erfolg. false, wenn der Bezeichner nicht erkannt wird (zusätzlich wird eineWarningausgelöst). Daher sollten vom Benutzer stammende Bezeichner immer validiert werden, bevor sie übergeben werden.
Praktische Beispiele
Beispiel 1: Die Standard-Zeitzone setzen
timezone_open() ändert die Standard-Zeitzone des Skripts nicht — das ist die Aufgabe von date_default_timezone_set(). Setzen Sie diese einmal zu Beginn Ihres Skripts, damit jedes DateTime, das ohne explizite Zone erstellt wird, die richtige Zone verwendet:
<?php
date_default_timezone_set('America/New_York');
echo date_default_timezone_get(); // America/New_YorkBeispiel 2: Ein DateTime mit einer bestimmten Zeitzone erstellen
Übergeben Sie das von timezone_open() zurückgegebene Objekt als zweites Argument an den DateTime-Konstruktor. 'now' wird dann in dieser Zone interpretiert:
Das abschließende P im Format gibt den UTC-Offset aus (zum Beispiel +02:00), sodass Sie bestätigen können, dass die Zone angewendet wurde.
Beispiel 3: Zwischen Zeitzonen konvertieren
Ein DateTime speichert immer einen absoluten Zeitpunkt. Der Aufruf von setTimezone() verschiebt den Zeitpunkt nicht — er ändert lediglich die Darstellung. Hier wird Mittag in New York als entsprechende Uhrzeit in Paris angezeigt:
Die Uhr springt um sechs Stunden vor, da Paris im Januar sechs Stunden vor New York liegt.
Beispiel 4: Ungültige Bezeichner abfangen
Da timezone_open() bei einem Fehler false zurückgibt, sollte das Ergebnis vor der Verwendung überprüft werden — insbesondere wenn der Bezeichner aus Benutzereingaben stammt:
<?php
$tz = @timezone_open('Mars/Olympus_Mons');
if ($tz === false) {
echo 'Unknown timezone, falling back to UTC.';
$tz = timezone_open('UTC');
}
echo "\n", $tz->getName(); // UTCWann sollte timezone_open() verwendet werden?
- Einen Zeitpunkt in mehreren Zeitzonen anzeigen — alles in UTC speichern und bei der Ausgabe mit
setTimezone()konvertieren. - Den Offset oder den Zonennamen eines
DateTimeübertimezone_name_get()odertimezone_offset_get()auslesen. - Prozedurale Codebasen, die aus Konsistenzgründen
function()-Aufrufe gegenübernewbevorzugen.
Wer objektorientiertes PHP schreibt, liest new DateTimeZone('Europe/Paris') natürlicher — und es verhält sich identisch.
Fazit
timezone_open() erstellt aus einem Bezeichner ein DateTimeZone-Objekt, damit DateTime-Werte in der richtigen Zone interpretiert und dargestellt werden. Die wichtigsten Punkte: Es ist austauschbar mit new DateTimeZone(), gibt bei einem ungültigen Bezeichner false zurück (also Eingaben validieren), und setTimezone() ändert nur die angezeigte Zeit, nie den zugrunde liegenden Zeitpunkt. Für einen umfassenderen Überblick siehe PHP Timezones und PHP Date and Time.