W3docs

timezone_open()

La fonction timezone_open est une fonction PHP intégrée qui crée un nouvel objet DateTimeZone à partir d'un identifiant de fuseau horaire.

La fonction PHP timezone_open()

timezone_open() crée un nouvel objet DateTimeZone à partir d'un identifiant de fuseau horaire. Il s'agit de l'alias en style procédural de new DateTimeZone() — les deux font exactement la même chose, vous pouvez donc utiliser celui qui correspond le mieux à votre style de code.

Un objet DateTimeZone seul ne « fait » rien. Son rôle est d'être transmis à un objet DateTime afin que les horodatages soient interprétés et affichés dans le bon fuseau. C'est ce qui rend timezone_open() utile : il permet à un script d'afficher le même instant correctement pour des utilisateurs à New York, Paris ou Tokyo.

Syntaxe

timezone_open(string $timezone): DateTimeZone|false

Paramètre

  • $timezone — un identifiant de fuseau horaire. Utilisez un nom IANA complet tel que "America/New_York", "Europe/Paris" ou "UTC". Les abréviations comme "EST" sont acceptées mais ambiguës et mieux à éviter. La liste complète provient de timezone_identifiers_list().

Valeur de retour

  • Un objet DateTimeZone en cas de succès.
  • false si l'identifiant n'est pas reconnu (un Warning est également émis). Pour cette raison, validez toujours les identifiants fournis par l'utilisateur avant de les passer à la fonction.

Exemples pratiques

Exemple 1 : Définir le fuseau horaire par défaut

timezone_open() ne modifie pas le fuseau horaire par défaut du script — c'est le rôle de date_default_timezone_set(). Définissez-le une fois en début de script afin que tout DateTime créé sans zone explicite utilise la bonne :

<?php

date_default_timezone_set('America/New_York');

echo date_default_timezone_get(); // America/New_York

Exemple 2 : Créer un DateTime avec un fuseau horaire spécifique

Passez l'objet retourné par timezone_open() comme second argument au constructeur de DateTime. 'now' est alors interprété dans ce fuseau :

php— editable, runs on the server

Le P en fin de format affiche le décalage UTC (par exemple +02:00), ce qui permet de confirmer que le fuseau a bien été appliqué.

Exemple 3 : Convertir entre fuseaux horaires

Un DateTime stocke toujours un instant absolu. Appeler setTimezone() ne déplace pas cet instant — cela change uniquement la façon dont il est affiché. Ici, midi à New York est affiché comme l'heure équivalente sur l'horloge murale à Paris :

php— editable, runs on the server

L'horloge avance de six heures car Paris est en avance de six heures sur New York en janvier.

Exemple 4 : Se protéger contre un identifiant invalide

Comme timezone_open() retourne false en cas d'échec, vérifiez le résultat avant de l'utiliser — surtout lorsque l'identifiant provient d'une saisie utilisateur :

<?php

$tz = @timezone_open('Mars/Olympus_Mons');

if ($tz === false) {
    echo 'Unknown timezone, falling back to UTC.';
    $tz = timezone_open('UTC');
}

echo "\n", $tz->getName(); // UTC

Quand utiliser timezone_open()

  • Afficher un instant dans plusieurs fuseaux — stockez tout en UTC, puis convertissez à l'affichage avec setTimezone().
  • Lire le décalage ou le nom du fuseau d'un DateTime via timezone_name_get() ou timezone_offset_get().
  • Les bases de code procédurales qui préfèrent les appels function() à new par souci de cohérence.

Si vous écrivez du PHP orienté objet, new DateTimeZone('Europe/Paris') se lit plus naturellement et se comporte de manière identique.

Conclusion

timezone_open() construit un objet DateTimeZone à partir d'un identifiant afin que les valeurs DateTime soient interprétées et rendues dans le bon fuseau. Les points clés : il est interchangeable avec new DateTimeZone(), il retourne false sur un identifiant invalide (validez donc les entrées), et setTimezone() ne modifie que l'heure affichée, jamais l'instant sous-jacent. Pour une vue d'ensemble, consultez PHP Timezones et PHP Date and Time.

Pratique

Pratique
Que peut-on dire de la classe 'DateTimeZone' en PHP, d'après la page fournie ?
Que peut-on dire de la classe 'DateTimeZone' en PHP, d'après la page fournie ?
Was this page helpful?