W3docs

timezone_identifiers_list()

Die PHP-Funktion timezone_identifiers_list() gibt ein Array aller bekannten Zeitzonen-Bezeichner zurück, gefiltert nach Region oder Land.

Einführung

Die Funktion timezone_identifiers_list() gibt ein Array mit allen Zeitzonen-Bezeichnern zurück, die PHP kennt. Zeitzonen-Bezeichner sind Zeichenketten im Format Area/Location (zum Beispiel America/New_York, Europe/London, Asia/Tokyo) und stammen aus der IANA-Zeitzonendatenbank, die mit PHP ausgeliefert wird.

Diese Seite behandelt die Signatur der Funktion, wie der Rückgabewert zu interpretieren ist, wie die Liste nach Kontinent oder Land gefiltert werden kann, und die häufigsten praktischen Anwendungsfälle: das Erstellen eines Zeitzonen-Dropdowns und die Validierung benutzerseitig angegebener Zeitzonennamen.

Syntax

timezone_identifiers_list(
    int $timezoneGroup = DateTimeZone::ALL,
    ?string $countryCode = null
): array

Beide Parameter sind optional und wurden in PHP 5.3 hinzugefügt, wobei das Verhalten des Länderfilters in späteren Versionen verfeinert wurde:

  • $timezoneGroup — eine DateTimeZone-Konstante, die das Ergebnis auf eine Region beschränkt, beispielsweise DateTimeZone::EUROPE, DateTimeZone::AMERICA oder DateTimeZone::ASIA. Der Standardwert DateTimeZone::ALL gibt jeden standardmäßigen Bezeichner zurück.
  • $countryCode — ein zweistelliger ISO 3166-1-Ländercode (zum Beispiel 'US', 'GB', 'IN'). Er wirkt sich nur aus, wenn $timezoneGroup auf DateTimeZone::PER_COUNTRY gesetzt ist.

Die Funktion gibt ein numerisch indiziertes Array von Zeichenketten zurück. Die Bezeichner werden in alphabetischer Reihenfolge zurückgegeben.

timezone_identifiers_list() ist der prozedurale Alias von DateTimeZone::listIdentifiers() — beide liefern dasselbe Ergebnis.

Alle Bezeichner auflisten

<?php

$identifiers = timezone_identifiers_list();

echo count($identifiers) . " timezones\n";
echo $identifiers[0] . "\n";
echo $identifiers[1] . "\n";

Ausgabe (die genaue Anzahl hängt von Ihrer PHP/IANA-Version ab):

419 timezones
Africa/Abidjan
Africa/Accra

Sie können das Array durchlaufen, um jede verfügbare Zeitzone auszugeben:

<?php

foreach (timezone_identifiers_list() as $tz) {
    echo $tz . "\n";
}

Nach Region oder Land filtern

Übergeben Sie eine DateTimeZone-Gruppenkonstante, um die Liste auf einen Kontinent einzuschränken:

<?php

$european = timezone_identifiers_list(DateTimeZone::EUROPE);

echo $european[0] . "\n"; // Europe/Amsterdam

Um die Zeitzonen für ein einzelnes Land zu erhalten, verwenden Sie DateTimeZone::PER_COUNTRY zusammen mit einem Ländercode:

<?php

$usZones = timezone_identifiers_list(DateTimeZone::PER_COUNTRY, 'US');

echo $usZones[0] . "\n"; // America/Adak
echo in_array('America/New_York', $usZones, true) ? "found\n" : "missing\n"; // found

Dies ist praktisch, wenn Sie eine länderabhängige Auswahlmöglichkeit erstellen möchten — zum Beispiel, wenn nach der Auswahl von „Vereinigte Staaten" nur US-Zeitzonen angezeigt werden sollen.

Benutzereingaben validieren

Da die Funktion eine maßgebliche Liste zurückgibt, ist sie die sicherste Methode, um zu prüfen, ob eine Zeitzonenzeichenkette gültig ist, bevor sie an DateTimeZone oder date_default_timezone_set() übergeben wird:

<?php

function isValidTimezone(string $tz): bool
{
    return in_array($tz, timezone_identifiers_list(), true);
}

var_dump(isValidTimezone('Europe/London'));     // bool(true)
var_dump(isValidTimezone('Mars/Olympus_Mons')); // bool(false)

Einen Bezeichner anwenden

Sobald Sie einen gültigen Bezeichner haben, setzen Sie ihn als skriptweit gültigen Standard mit date_default_timezone_set():

<?php

date_default_timezone_set('America/New_York');

Oder erstellen Sie ein DateTimeZone-Objekt, um eine Zeitzone an ein bestimmtes Datum zu knüpfen, ohne den globalen Standard zu ändern:

<?php

$timezone = new DateTimeZone('Asia/Tokyo');
$date = new DateTime('now', $timezone);

echo $date->format('Y-m-d H:i:s P');

PHP akzeptiert auch einen festen UTC-Offset anstelle eines benannten Zeitzonennamens. Dabei werden Sommerzeit-Regeln vollständig umgangen:

<?php

$timezone = new DateTimeZone('-08:00');

Hinweise und Fallstricke

  • Die Liste wird aus der IANA-Datenbank erstellt, die mit Ihrem PHP-Build ausgeliefert wird. Daher können sich die genauen Bezeichner und deren Anzahl zwischen PHP-Versionen ändern. Verwenden Sie timezone_version_get(), um zu prüfen, welche Datenbankversion aktiv ist.
  • Einige veraltete Bezeichner sind als veraltet markiert und könnten in zukünftigen Versionen entfernt werden. Bevorzugen Sie kanonische Area/Location-Namen gegenüber Abkürzungen.
  • Für Zeitzonen-Abkürzungen (wie CET oder PST) anstelle vollständiger Bezeichner siehe timezone_abbreviations_list().
  • Einen umfassenderen Überblick über die Arbeit mit Zeitzonen in PHP finden Sie unter PHP Timezones.

Practice

Practice

Übung
Welche der folgenden Angaben ist ein gültiger Zeitzonen-Bezeichner in PHP?
Welche der folgenden Angaben ist ein gültiger Zeitzonen-Bezeichner in PHP?
Was this page helpful?