Timezones

Explications générales sur les timezones:

Les timezones sont les fuseaux horaires, c’est un sujet bien plus vaste et complexe qu’il n’y parait si l’on se penche sur les détails, mais nous allons ici rester dans des cas « simples » qui concernent tout le monde.
Pour plus d’informations consultez : RFC7808, RFC8536 et ISO8601.

Quelques rappels pour commencer, le « zéro » des timezones est UTC+0 (Universal Time Coordinated), c’est l’heure qu’il est au méridien de Greenwich (en gros).

On rajoute des heures en allant vers l’est parce que le soleil s’y est levé plus tôt et on en enlève en allant vers l’ouest parce que le soleil s’y lève plus tard.

Jusque là c’est facile. Pourtant en France (qui est sur le chemin du méridien de Greenwich), on utilise pas UTC+0 mais UTC+1 en hiver (appelé également CET, Central European Time) et UTC+2 en été (appelé CEST, Central European Summer Time).

Donc la timezone de la France (Europe/Paris) varie entre deux fuseaux horaires en fonction du moment de l’année où vous vous trouvez.

Ces changements horaires sont très bien gérés par Linux de nos jours mais si vos crontabs tombent entre 2 et 3 h du matin vous pourriez avoir des surprises quant à l’execution de vos scripts.

Sur vos infrastructures il y a typiquement 3 sources de temps :

Le système maintenu à l’heure par ntp (Network Time Protocole) et dans la grosse majorité des cas calé sur la timezone France (Europe/Paris).

PHP par défaut basé sur l’heure système

Mysql par défaut basé sur l’heure système

Il faut harmoniser ces heures sous peine de risquer de grosses incohérences.

Attention la timezone France (Europe/Paris) n’est pas forcément le meilleur choix, elle a notamment l’inconvénient du changement d’heure. Mais c’est celle que tous vos collaborateurs de France métropolitaine ont l’habitude d’utiliser.

Gestion du temps dans Debian :

système : dpkg-reconfigure tz-data

PHP : Cette directive est initialisable partout
Dans votre code date_default_timezone_set("Asia/Bangkok");
Dans votre php.ini date.timezone='Etc/UTC'
Dans votre .htacess php_value date.timezone 'Europe/Paris'
Dans votre .user.ini date.timezone='Etc/UTC'

Mysql :
Modifier le fichier de configuration <code>default-time-zone = ‘+00:00′</code>
Modifier la variable globale : SET GLOBAL time_zone = '+00:00';
Modifier la variable de session : SET time_zone = '+00:00';