Signatur
Beschreibung
intltz_create_enumeration() ist die prozedurale Variante von IntlTimeZone::createEnumeration() und gibt einen IntlIterator zurück, über den alle verfügbaren Zeitzonen-IDs durchlaufen werden können. Ohne Argument werden sämtliche bekannten Zeitzonen aufgezählt.
Wird ein String übergeben, wird er als ISO-3166-1-alpha-2-Ländercode (z. B. 'US', 'DE') interpretiert und nur die zu diesem Land gehörenden Zeitzonen zurückgegeben. Wird eine Ganzzahl oder Fließkommazahl übergeben, wird sie als UTC-Rohoffset in Millisekunden interpretiert und die Liste auf Zeitzonen mit exakt diesem Offset reduziert.
Die Funktion ist nützlich, wenn Formulare mit Zeitzonen-Auswahllisten befüllt werden sollen oder wenn die verfügbaren Zeitzonen eines bestimmten Landes programmatisch ermittelt werden müssen. Sie setzt die ICU-Bibliothek voraus, die mit der intl-Erweiterung ausgeliefert wird.
Im Fehlerfall (z. B. ungültiger Ländercode) gibt die Funktion false zurück. Der zurückgegebene IntlIterator enthält Strings, die direkt als Argument für IntlTimeZone::createTimeZone() oder new DateTimeZone() verwendet werden können.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $countryOrRawOffset | int|float|string|null | null | Optionaler Filter: ein ISO-3166-1-alpha-2-Ländercode als string (z. B. 'DE') oder ein UTC-Rohoffset in Millisekunden als int/float (z. B. 3600000 für UTC+1). Bei null werden alle Zeitzonen zurückgegeben. |
Rückgabewert
IntlIterator zurück, der über die gefilterten Zeitzonen-IDs als Strings iteriert. Im Fehlerfall (z. B. ungültiger Ländercode) wird false zurückgegeben.Beispiele
Alle deutschen Zeitzonen auflisten
<?php
// Alle Zeitzonen für Deutschland (Ländercode 'DE') aufzählen
$iterator = intltz_create_enumeration('DE');
if ($iterator === false) {
echo 'Fehler beim Abrufen der Zeitzonen.';
} else {
foreach ($iterator as $tzId) {
echo $tzId . PHP_EOL;
}
}
Zeitzonen nach UTC-Offset filtern (UTC+1 = 3 600 000 ms)
<?php
// UTC+1 entspricht 3600 Sekunden = 3 600 000 Millisekunden
$offsetMs = 3600 * 1000;
$iterator = intltz_create_enumeration($offsetMs);
if ($iterator === false) {
echo 'Kein Ergebnis für diesen Offset.';
} else {
$zones = iterator_to_array($iterator);
echo 'Gefundene Zeitzonen: ' . count($zones) . PHP_EOL;
echo implode(', ', array_slice($zones, 0, 5)) . ' ...' . PHP_EOL;
}
Alle Zeitzonen ohne Filter aufzählen
<?php
// Alle verfügbaren Zeitzonen der ICU-Bibliothek
$iterator = intltz_create_enumeration();
$count = 0;
foreach ($iterator as $id) {
$count++;
}
echo 'Insgesamt verfügbare Zeitzonen: ' . $count . PHP_EOL;
// Wichtig · Fallstricke
Achtung: Der Offset-Parameter wird in Millisekunden angegeben, nicht in Sekunden. Ein häufiger Fehler ist die Übergabe von Sekunden (z. B. 3600 statt 3600000), was zu einem leeren oder falschen Ergebnis führt.
Die Funktion ist vom Zustand der installierten ICU-Bibliothek abhängig. Je nach ICU-Version und Betriebssystem können sich die zurückgelieferten Zeitzonen-IDs geringfügig unterscheiden. Für produktionskritischen Code empfiehlt sich ein Test gegen eine definierte ICU-Mindestversion.
Ab PHP 8.0 steht auch die objektorientierte Variante IntlTimeZone::createEnumeration() zur Verfügung, die identisches Verhalten bietet, aber besser in objektorientierte Code-Basen passt.