timezone_identifiers_list()
La fonction PHP timezone_identifiers_list() retourne un tableau de tous les identifiants de fuseau horaire connus de PHP, avec filtrage par région.
Introduction
La fonction timezone_identifiers_list() retourne un tableau contenant tous les identifiants de fuseau horaire connus de PHP. Les identifiants de fuseau horaire sont des chaînes au format Zone/Lieu (par exemple America/New_York, Europe/London, Asia/Tokyo) et proviennent de la base de données de fuseaux horaires IANA intégrée à PHP.
Cette page couvre la signature de la fonction, comment interpréter sa valeur de retour, comment filtrer la liste par continent ou par pays, ainsi que les utilisations les plus courantes : construire un menu déroulant de fuseaux horaires et valider les noms de fuseaux horaires fournis par l'utilisateur.
Syntaxe
timezone_identifiers_list(
int $timezoneGroup = DateTimeZone::ALL,
?string $countryCode = null
): arrayLes deux paramètres sont optionnels et ont été ajoutés en PHP 5.3, avec le comportement du filtre par pays affiné dans les versions ultérieures :
$timezoneGroup— une constanteDateTimeZonequi limite le résultat à une région, commeDateTimeZone::EUROPE,DateTimeZone::AMERICAouDateTimeZone::ASIA. La valeur par défautDateTimeZone::ALLretourne tous les identifiants standard.$countryCode— un code pays à deux lettres selon la norme ISO 3166-1 (par exemple'US','GB','IN'). Il ne prend effet que lorsque$timezoneGroupest défini surDateTimeZone::PER_COUNTRY.
La fonction retourne un tableau de chaînes indexé numériquement. Les identifiants sont retournés dans l'ordre alphabétique.
timezone_identifiers_list() est l'alias procédural de DateTimeZone::listIdentifiers() — les deux produisent le même résultat.
Lister tous les identifiants
<?php
$identifiers = timezone_identifiers_list();
echo count($identifiers) . " timezones\n";
echo $identifiers[0] . "\n";
echo $identifiers[1] . "\n";Résultat (le nombre exact dépend de votre version PHP/IANA) :
419 timezones
Africa/Abidjan
Africa/AccraVous pouvez parcourir le tableau pour afficher tous les fuseaux horaires disponibles :
<?php
foreach (timezone_identifiers_list() as $tz) {
echo $tz . "\n";
}Filtrer par région ou par pays
Passez une constante de groupe DateTimeZone pour limiter la liste à un continent :
<?php
$european = timezone_identifiers_list(DateTimeZone::EUROPE);
echo $european[0] . "\n"; // Europe/AmsterdamPour obtenir les fuseaux horaires d'un seul pays, utilisez DateTimeZone::PER_COUNTRY avec un code pays :
<?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"; // foundC'est pratique quand vous souhaitez un sélecteur tenant compte du pays — par exemple, afficher uniquement les fuseaux horaires américains après qu'un utilisateur a sélectionné « États-Unis ».
Valider les entrées utilisateur
Puisque la fonction retourne une liste faisant autorité, c'est la méthode la plus sûre pour vérifier si une chaîne de fuseau horaire est valide avant de la passer à DateTimeZone ou à date_default_timezone_set() :
<?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)Appliquer un identifiant
Une fois que vous disposez d'un identifiant valide, définissez-le comme valeur par défaut globale du script avec date_default_timezone_set() :
<?php
date_default_timezone_set('America/New_York');Ou créez un objet DateTimeZone pour associer un fuseau horaire à une date spécifique sans modifier la valeur par défaut globale :
<?php
$timezone = new DateTimeZone('Asia/Tokyo');
$date = new DateTime('now', $timezone);
echo $date->format('Y-m-d H:i:s P');PHP accepte également un décalage UTC fixe à la place d'une zone nommée. Cela ignore entièrement les règles de changement d'heure :
<?php
$timezone = new DateTimeZone('-08:00');Notes et points d'attention
- La liste est construite à partir de la base de données IANA livrée avec votre version de PHP, donc les identifiants exacts et leur nombre peuvent changer entre les versions PHP. Utilisez
timezone_version_get()pour vérifier quelle version de la base de données est active. - Certains identifiants hérités sont dépréciés et pourraient être supprimés dans de futures versions. Préférez les noms canoniques
Zone/Lieuaux abréviations. - Pour les abréviations de fuseau horaire (comme
CETouPST) plutôt que les identifiants complets, consulteztimezone_abbreviations_list(). - Pour une vue d'ensemble plus large du travail avec les fuseaux horaires en PHP, lisez PHP Timezones.