Outils pour utilisateurs

Outils du site


devweb:php:mysql_timezone (lu 919 fois)

Mysql et les timezones

Voilà, au bout d’une heure de travail au bureau, je suis en mesure de transformer ce topic en mini tuto :-)

En fait, il faut savoir qu’un dossier sur les fuseaux horaires existe sur les OS Linux et MacOS par défaut, et qu’il se trouve souvent dans /usr/share/zoneinfo/. Il faut aussi savoir qu’il existe quelques scripts s’exécutant dans mysql, et quelques autres hors de mysql (pour les OS précités, je ne sais pas encore ce qu’il en est pour windows).

On peut maintenant remplir les tables concernant les fuseaux horaires de MySQL.

il faut taper, dans un SHELL:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root --password mysql

Cette commande remplira les tables time_zone et assimilées de la database mysql (raison du dernier mysql de cette ligne).

Ensuite, connaître les noms des fuseaux horaires, la syntaxe de la commande convert_tz() and enjoy!

exemple (pour vérifier si ça a fonctionné comme attendu):

SELECT CONVERT_TZ('2007-10-27 02:00:00','UTC','CET');
retour:  
2007-10-27 04:00:00
SELECT CONVERT_TZ('2007-10-28 02:00:00','UTC','CET');
retour:
2007-10-28 03:00:00

et hop, je peux imprimer mon calendrier ad vitam eternam!

(à moins qu’un clown ne vienne changer les règles de changement d’horaires (comme Georges cette année pour les états-unis et le Canada :D))

PHP et les timezones

Pour définir un fuseau horaire, il faut définir la variable d’environnement PHP_TZ

Pour cela ajouter la ligne :

putenv("PHP_TZ=Europe/Paris");

en pratique, pour afficher une date suivant un fuseau horaire défini.

<?
date_default_timezone_set("Europe/Paris");
echo "heure de paris : ".date("Y-m-d H:i")."\n";
date_default_timezone_set("Japan");
echo "heure de Tokio: ".date("Y-m-d H:i")."\n";
?>
La liste de tous les fuseaux se trouve dans /usr/share/zoneinfo/
devweb/php/mysql_timezone.txt · Dernière modification: 20-08-2014 11:23 de edmc73