Version complète: sur le forum Webmaster Hub : date_default_timezone_set
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
djp1988
Bonjour, mis en place un systeme de commentataires sur mon site, on peut laisser des com, et il s'affiche le message et l'heure a laquel on l'a mis, mais cette heure est l'heure du serveur qui se trouve aux USA

donc j'ai mis ca dans mon php:

CODE
date_default_timezone_set("Europe/Paris");


Mais les heures restent identique,

j'ai PHP 5 au passage !
TheRec
Bonsoir,

Étonnant. Que te donne la commande date_default_timezone_get après avoir utilisé date_default_timezone_set ? Est-ce que date_default_timezone_set retourne bien la valeur booléenne true après l'appel ?
Les dates dont tu parles ne sont-elles pas stockées dans la base de données avec l'ancien fuseau horaire ?

À tout hasard, tu peux toujours essayer de modifier la valeur date.timezone soit par un fichier .htaccess :
CODE
php_value date.timezone Europe/Paris

Ou avec ini_set :
CODE
ini_set('date.timezone',"Europe/Paris")

djp1988
J'ai essayer le php_ini et ca marche pas,

Comment normallement on fait alors pour convertir les horaires ?
TheRec
On peut sans problème utiliser la fonction date_default_timezone_set. Si tu voulais bien répondre au quelques question ci-dessus ça pourrait faire avancer le problème sans doute.
djp1988
Que te donne la commande date_default_timezone_get après avoir utilisé date_default_timezone_set ?
---> Ca ne me fais rien j'ai essayer date_default_timezone_get apres la ligne ou j'ai mis date_default_timezone_set("Europe/Paris"); mais rien n'a changer

Est-ce que date_default_timezone_set retourne bien la valeur booléenne true après l'appel ?
---> Oui j'ai eu "1"

Les dates dont tu parles ne sont-elles pas stockées dans la base de données avec l'ancien fuseau horaire ?
---> Je ne sais pas là sur la base de donnés j'ai l'heure américaine.
TheRec
Dans le cadre de PHP, lorsque tu utilises la fonction date_default_timezone_set, tu changes le fuseau horaire pour l'exécution du script courant, donc lorsque tu utilisera les autres fonction permettant par exemple de retourner une date tu obtiendras la date avec le fuseau horaire souhaité.

Pour tester si la date (sous PHP) est changée tu peux regarder les résultats de ce petit script :
CODE
  echo 'Heure du serveur, par défaut ('.date_default_timezone_get().') : '.date('r').'<br/>';
  if(date_default_timezone_set('Europe/Paris')) {
    echo 'Fuseau horaire changé pour '.date_default_timezone_get().'. Heure à ce fuseau : '.date('r').'<br/>';
  } else {
    echo 'Le fuseau horaire n\'a pas pu être changé.<br/>';
  }

Ce n'est qu'une exemple, pour te montrer qu'au premier appel de date, le fuseau horaire est celui du serveur par défaut, le deuxième est celui modifié pour toute la durée d'exécution du script. Mais cela ne permet absolument pas de changer des date déjà enregistrées dans ta base de données.

Si ton fuseau horaire était faux lorsque tu as enregistré tes données dans la base de données, lorsque tu les liras elle seront fausses, tu devras faire la correction soit à l'affichage, soit directement dans la base de données (ce qui serait mieux, à toi de voir quels enregistrements doivent être changés). S'il s'agit d'une base de données MySQL et que tu as bien un champ DATETIME/TIMESTAMP, tu peux utiliser la fonction CONVERT_TZ.
djp1988
Ca me plait bien la fonction CONVERT_TZ, cependant je ne comprends pas pourquoi j'ai un résultat NULL

avec cette requette:
CODE
SELECT CONVERT_TZ('date','PST','CET') AS date
FROM comment_trips;


ou le champ date dans la table comment_trips est de type 'datetime'

Okay, je viens de comprendre, alors il faut distinguer deux choses, la date lorsqu'on l'insere directement avec PHP sous la forme
CODE
print date ('l F jS Y');


Et puis les dates lorsque on les insére à partir de la base de donnée, j'avais les 2 cas comme problème, mais avec votre script j'ai pu convertir les dates que j'insérer directement.

Mais il faut que je convertis les dates et heures d'un champ 'date' de la base de donnees
djp1988
Ok, j'ai trouvé:

CODE
SELECT ADDDATE(date, INTERVAL 9 HOUR) AS date
FROM comment_trips



biggrin.gif:D:D
djp1988
Cependant, j'ai encore une question, alors j'ai ca une fois que je convertis l'heure etc...: "2008-04-18 09:39:09"

Mais c'est très americaine !

Je voudrais cela: 18/04/2007 09:39:09

Peut etre meme: 18/04/2007 9h39 -> sans le secondes et avec un 'h'

Comment puis je manipuler les données ?

Il doit bien sur avoir une solution plus simple que:

CODE
SELECT DAYOFMONTH(ADDDATE(date, INTERVAL 9 HOUR)) AS day, MONTH(ADDDATE(date, INTERVAL 9 HOUR)) AS month, YEAR(ADDDATE(date, INTERVAL 9 HOUR)) AS year, HOUR(ADDDATE(date, INTERVAL 9 HOUR)) AS hour, MINUTE(ADDDATE(date, INTERVAL 9 HOUR)) AS mins
FROM comment_trips
TheRec
Tu peux utiliser la fonction DATE_FORMAT. Ou le faire dans ton code PHP avec la fonction date.
SQL
SELECT DATE_FORMAT(ADDDATE(date, INTERVAL 9 HOUR),"%d/%m/%Y %Hh%i") AS date FROM comment_trips
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.