W3docs

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|false

Parameter

  • $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 liefert timezone_identifiers_list().

Rückgabewert

  • Ein DateTimeZone-Objekt bei Erfolg.
  • false, wenn der Bezeichner nicht erkannt wird (zusätzlich wird eine Warning ausgelö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_York

Beispiel 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:

php— editable, runs on the server

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:

php— editable, runs on the server

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(); // UTC

Wann 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 über timezone_name_get() oder timezone_offset_get() auslesen.
  • Prozedurale Codebasen, die aus Konsistenzgründen function()-Aufrufe gegenüber new bevorzugen.

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.

Übungen

Übung
Was kann über die Klasse 'DateTimeZone' in PHP gesagt werden, wie auf der angegebenen Webseite beschrieben?
Was kann über die Klasse 'DateTimeZone' in PHP gesagt werden, wie auf der angegebenen Webseite beschrieben?
Was this page helpful?