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|falseParamè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 detimezone_identifiers_list().
Valeur de retour
- Un objet
DateTimeZoneen cas de succès. falsesi l'identifiant n'est pas reconnu (unWarningest é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_YorkExemple 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 :
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 :
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(); // UTCQuand 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
DateTimeviatimezone_name_get()outimezone_offset_get(). - Les bases de code procédurales qui préfèrent les appels
function()ànewpar 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.