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
): arrayBeide Parameter sind optional und wurden in PHP 5.3 hinzugefügt, wobei das Verhalten des Länderfilters in späteren Versionen verfeinert wurde:
$timezoneGroup— eineDateTimeZone-Konstante, die das Ergebnis auf eine Region beschränkt, beispielsweiseDateTimeZone::EUROPE,DateTimeZone::AMERICAoderDateTimeZone::ASIA. Der StandardwertDateTimeZone::ALLgibt 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$timezoneGroupaufDateTimeZone::PER_COUNTRYgesetzt 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/AccraSie 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/AmsterdamUm 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"; // foundDies 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
CEToderPST) anstelle vollständiger Bezeichner siehetimezone_abbreviations_list(). - Einen umfassenderen Überblick über die Arbeit mit Zeitzonen in PHP finden Sie unter PHP Timezones.