W3docs

date_default_timezone_set()

Apprenez à utiliser date_default_timezone_set() en PHP pour contrôler le fuseau horaire de toutes les fonctions date/heure d'un script, avec exemples.

Introduction

La fonction date_default_timezone_set() définit le fuseau horaire par défaut utilisé par toutes les fonctions date/heure d'un script PHP. Une fois appelée, des fonctions comme date(), mktime(), strtotime() et DateTime interprètent et formatent les heures par rapport à ce fuseau horaire. Cette page explique ce que fait la fonction, quand vous en avez besoin, et les pièges à éviter.

Syntaxe

date_default_timezone_set(string $timezoneId): bool

$timezoneId est une string identifiant de fuseau horaire issue de la base de données IANA, comme Europe/London ou Asia/Tokyo — pas une abréviation telle que EST. La fonction retourne true en cas de succès et false si l'identifiant est invalide. Lorsque l'identifiant est invalide, PHP émet également un E_WARNING et revient au fuseau horaire précédemment configuré.

Pourquoi c'est important

Un timestamp est simplement un nombre de secondes depuis l'époque Unix (UTC). Pour transformer ce nombre en date lisible — "2024-03-15 14:30" — PHP doit savoir dans quel fuseau horaire l'afficher. Si vous n'en définissez pas, PHP utilise la valeur date.timezone de php.ini, qui peut différer entre votre machine locale, l'environnement de staging et la production. Ce décalage est une source classique de bugs du type "l'heure est fausse de quelques heures".

Appeler date_default_timezone_set() tôt dans votre script rend le fuseau horaire explicite et cohérent partout où votre code s'exécute, quelle que soit la configuration du serveur.

Utilisation de base

<?php
date_default_timezone_set('America/New_York');

echo date('Y-m-d H:i:s');

Ceci définit le fuseau horaire du script sur l'heure de l'Est des États-Unis. Chaque appel date/heure suivant sera rendu dans ce fuseau. Définir le fuseau ne modifie pas le timestamp sous-jacent — uniquement la façon dont il est affiché.

Changer de fuseau horaire à l'exécution

Vous pouvez changer le fuseau horaire par défaut plusieurs fois. Le même timestamp Unix affiche une heure murale différente selon chaque fuseau :

php— editable, runs on the server

Ici, date_default_timezone_get() confirme le fuseau actuellement actif — utile lors du débogage.

Gérer un identifiant invalide

Puisque la fonction retourne false (et émet un avertissement) en cas d'identifiant invalide, validez la valeur de retour lorsque le fuseau provient d'une entrée utilisateur ou d'une configuration :

<?php
$zone = 'Mars/Olympus_Mons'; // not a real timezone

if (@date_default_timezone_set($zone)) {
    echo "Timezone set to $zone\n";
} else {
    date_default_timezone_set('UTC');
    echo "Invalid timezone, falling back to UTC\n";
}
// Outputs: Invalid timezone, falling back to UTC

Identifiants couramment utilisés

PHP prend en charge des centaines de fuseaux. Quelques-uns fréquemment utilisés :

RégionIdentifiant
New YorkAmerica/New_York
ChicagoAmerica/Chicago
Los AngelesAmerica/Los_Angeles
LondresEurope/London
ParisEurope/Paris
TokyoAsia/Tokyo
SydneyAustralia/Sydney
Temps universel coordonnéUTC

Pour la liste complète générée automatiquement, utilisez timezone_identifiers_list(), et consultez la référence PHP timezones pour un aperçu.

Bonnes pratiques

  • Définissez-le une seule fois, tôt. Appelez la fonction près du début de votre fichier d'amorçage/d'entrée afin que toute la requête partage un seul fuseau.
  • Préférez stocker en UTC. Enregistrez les timestamps en UTC dans la base de données et convertissez vers le fuseau de l'utilisateur uniquement pour l'affichage ; cela évite toute ambiguïté liée à l'heure d'été.
  • Utilisez des identifiants, pas des abréviations. Europe/London gère automatiquement l'heure d'été ; GMT/BST ne le font pas.

Conclusion

date_default_timezone_set() vous donne un contrôle explicite sur la façon dont PHP affiche les dates et les heures, en maintenant un comportement cohérent entre les environnements. Définissez-le délibérément, validez les identifiants non fiables, et confirmez le fuseau actif avec date_default_timezone_get() lorsque quelque chose semble incorrect.

Pratique

Pratique
Quel est le rôle de la fonction 'date_default_timezone_set()' en PHP ?
Quel est le rôle de la fonction 'date_default_timezone_set()' en PHP ?
Was this page helpful?