Signatur
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
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
// ...
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
// )
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
// 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.