Start · Sprachen · PHP · Referenz · intltz_create_time_zone_id_enumeration

intltz_create_time_zone_id_enumeration

Funktion

Liefert eine Aufzählung (<code>IntlIterator</code>) von Zeitzonen-IDs, die nach Typ, Region und/oder UTC-Versatz gefiltert werden können.

seit PHP 5.5.0 Kategorie: string

Signatur

intltz_create_time_zone_id_enumeration(int $zoneType, string $region = null, int $rawOffset = null): IntlIterator|false

Beschreibung

intltz_create_time_zone_id_enumeration() ist die prozedurale Variante von IntlTimeZone::createTimeZoneIDEnumeration() und gibt einen Iterator zurück, der alle Zeitzonen-IDs enthält, die den angegebenen Filterbedingungen entsprechen. Die Funktion nutzt intern die ICU-Bibliothek und bietet damit eine vollständige, standardkonforme Zeitzonenliste.

Mit dem Parameter zoneType lässt sich einschränken, ob nur kanonische Zeitzonen (IntlTimeZone::TYPE_CANONICAL), kanonische Zeitzonen mit DST (IntlTimeZone::TYPE_CANONICAL_LOCATION) oder alle (IntlTimeZone::TYPE_ANY) zurückgegeben werden sollen. Optional kann die Liste durch einen ISO-3166-Ländercode (region) und/oder einen rohen UTC-Versatz in Millisekunden (rawOffset) weiter eingeschränkt werden.

Die Funktion ist besonders nützlich, wenn Auswahllisten für Benutzer-Einstellungen erstellt werden sollen, beispielsweise in mehrsprachigen Anwendungen, die nur Zeitzonen eines bestimmten Landes oder eines bestimmten UTC-Offsets anbieten möchten. Sie ist ein bequemer Ersatz für handgepflegte Zeitzonen-Arrays und hält sich automatisch an den aktuellen ICU-Datenstand.

Voraussetzung ist die Intl-Erweiterung (ext-intl). Das Ergebnis kann direkt mit foreach durchlaufen werden, da IntlIterator das Iterator-Interface implementiert.

Parameter

Name Typ Default Beschreibung
$zoneType Pflicht int Filtert den Typ der zurückzugebenden Zeitzonen. Erlaubte Werte sind IntlTimeZone::TYPE_ANY (alle), IntlTimeZone::TYPE_CANONICAL (nur kanonische) und IntlTimeZone::TYPE_CANONICAL_LOCATION (kanonische mit Ortsbezug).
$region string null Optionaler ISO-3166-Ländercode (z. B. 'DE', 'US'), um die Aufzählung auf Zeitzonen einer bestimmten Region zu beschränken. null deaktiviert diesen Filter.
$rawOffset int null Optionaler roher UTC-Versatz in Millisekunden (ohne DST-Berücksichtigung), z. B. 3600000 für UTC+1. null deaktiviert diesen Filter. Wird region auf null gesetzt, muss rawOffset ebenfalls null oder weggelassen werden.

Rückgabewert

Typ
IntlIterator|false
Beschreibung
Gibt bei Erfolg ein IntlIterator-Objekt zurück, das alle passenden Zeitzonen-IDs als Strings liefert. Im Fehlerfall (z. B. ungültiger zoneType) wird false zurückgegeben.

Beispiele

Alle kanonischen Zeitzonen ausgeben

<?php
$iter = intltz_create_time_zone_id_enumeration(IntlTimeZone::TYPE_CANONICAL);

if ($iter === false) {
    echo 'Fehler beim Erstellen der Aufzählung.';
    exit;
}

foreach ($iter as $tzId) {
    echo $tzId . PHP_EOL;
}
// Ausgabe (Auszug):
// Africa/Abidjan
// Africa/Accra
// America/New_York
// ...
Africa/Abidjan Africa/Accra America/New_York ...

Zeitzonen für Deutschland (ISO-3166: DE) filtern

<?php
$iter = intltz_create_time_zone_id_enumeration(
    IntlTimeZone::TYPE_ANY,
    'DE'
);

if ($iter === false) {
    echo 'Fehler beim Erstellen der Aufzählung.';
    exit;
}

$zones = [];
foreach ($iter as $tzId) {
    $zones[] = $tzId;
}

print_r($zones);
// Array
// (
//     [0] => Europe/Berlin
//     [1] => Europe/Busingen
// )
Array ( [0] => Europe/Berlin [1] => Europe/Busingen )

Zeitzonen nach UTC-Versatz (UTC+1) und Region filtern

<?php
// UTC+1 = 3600 Sekunden * 1000 ms = 3600000 ms
$rawOffset = 3600 * 1000;

$iter = intltz_create_time_zone_id_enumeration(
    IntlTimeZone::TYPE_CANONICAL,
    'FR',
    $rawOffset
);

if ($iter === false) {
    echo 'Fehler.';
    exit;
}

foreach ($iter as $tzId) {
    echo $tzId . PHP_EOL;
}
// Europe/Paris
Europe/Paris

// Wichtig · Fallstricke

Erweiterung erforderlich: Die Funktion ist nur verfügbar, wenn die PHP-Erweiterung ext-intl installiert und aktiviert ist. Ohne sie führt der Aufruf zu einem fatalen Fehler.

ICU-Version: Die zurückgegebenen Zeitzonen-IDs hängen von der installierten ICU-Version ab. Unterschiedliche Server können leicht abweichende Ergebnisse liefern. Für produktive Anwendungen sollte die ICU-Version geprüft und regelmäßig aktualisiert werden.

Parameterabängigkeit: Wird rawOffset angegeben, muss auch region gesetzt sein (darf nicht null sein). Andernfalls gibt die Funktion false zurück oder verhält sich undefiniert je nach ICU-Version.