W3docs

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
): array

Les 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 constante DateTimeZone qui limite le résultat à une région, comme DateTimeZone::EUROPE, DateTimeZone::AMERICA ou DateTimeZone::ASIA. La valeur par défaut DateTimeZone::ALL retourne 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 $timezoneGroup est défini sur DateTimeZone::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/Accra

Vous 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/Amsterdam

Pour 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"; // found

C'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/Lieu aux abréviations.
  • Pour les abréviations de fuseau horaire (comme CET ou PST) plutôt que les identifiants complets, consultez timezone_abbreviations_list().
  • Pour une vue d'ensemble plus large du travail avec les fuseaux horaires en PHP, lisez PHP Timezones.

Practice

Practice

Pratique
Lequel des éléments suivants est un identifiant de fuseau horaire valide en PHP ?
Lequel des éléments suivants est un identifiant de fuseau horaire valide en PHP ?
Was this page helpful?