OVH Cloud OVH Cloud

probleme de decalage horaire

61 réponses
Avatar
CrazyCat
Bonjour ici...

J'ai un petit soucis, à savoir que pour un site sur lequel je travaille,
l'horodatage est *très important* et le serveur de dev et le serveru de
prod ne sont pas au même endroit (l'un en france, l'autre aux US).

Forcémment, quand je passe le site "fonctionnel" en prod, je me prend 6h
dans la vue.

Je voudrais éviter de reprendre toutes mes fonctions date() pour leur
rajouter 6h, y'a t'il un moyen de dire à mes scripts que je veux qu'il
compte le décalage horaire en plus?

Merci d'avance

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

10 réponses

1 2 3 4 5
Avatar
Olivier Miakinen

Je voudrais éviter de reprendre toutes mes fonctions date() pour leur
rajouter 6h, y'a t'il un moyen de dire à mes scripts que je veux qu'il
compte le décalage horaire en plus?


Sans rien changer du tout à tes scripts, je ne vois pas. À moins bien
sûr de changer le fuseau horaire de l'une des deux machines.

Mais sinon, tu peux remplacer tous tes appels à date() par des appels à
gmdate().


Soit dit en passant, il y a une coquille dans la doc de la fonction date
(ici en français mais il y a la même en anglais) :

<cit. http://fr2.php.net/manual/fr/function.date.php>
O Différence d'heures avec l'heure de Greenwich (GMT), exprimée en
heures Exemple : +0200
</cit.>

Si elle n'était exprimée qu'en heures, ce serait +2 (resp. +2.5) alors
qu'en fait elle est exprimée en heures et minutes : +0200 (resp. +0230).

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
John GALLET
Re,

J'ai un petit soucis, à savoir que pour un site sur lequel je travaille,
l'horodatage est *très important*
Soit. Mais qu'est-ce qui est important ? Retrouver la chronologie des

événements (ou d'un ensemble cohérent d'événements) ou déclencher une
action à une heure précise ?

et le serveur de dev et le serveur de
prod ne sont pas au même endroit (l'un en france, l'autre aux US).
Nécessairement (...) e dev se fiche de la prod et réciproquement. Donc on

se fout complètement qu'ils aient des heures machine différentes.


Forcémment, quand je passe le site "fonctionnel" en prod, je me prend 6h
dans la vue.
Oui et ? C'est l'heure locale, donc tout va bien.



Je voudrais éviter de reprendre toutes mes fonctions date() pour leur
rajouter 6h, y'a t'il un moyen de dire à mes scripts que je veux qu'il
compte le décalage horaire en plus?
Je ne comprends pas le besoin. Si tu as la bonne heure sur le serveur US,

il n'y a pas de problèmes. Si tu traces une chronologie d'événements, peu
importe qu'elle ait lieu à 6 heures de décalage. Si tu déclenches des
événements à des heures précises, prie Sainte Crontab avec le décalage
"kivabien".

Maintenant pour répondre à ta question même si je ne la comprends pas
complètement, j'ai souvenir d'une variable de derrière les fagots, genre
putenv() de PHP_TIMEZONE ou PHP_TZ un truc du genre. Mais j'avais
peut-être encore abusé de la Guinness.

a++;
JG

Avatar
boiteauxlettres
salut,

j'ai eu ce souci moi aussi, et j'ai trouvé sur google (merci google)
une solution utilisant php et javascript :

http://rehfeld.us/dev/timezone/
http://www.mt-dev.com/2002/06/use-php-and-javascript-to-display-local-time/

en gros, une info postée à 16h00 GMT+1 (heure serveur de la bdd) doit
apparaitre comme ayant ete postee a 10h00 par qqun surfant sur la cote
est des états-unis GMT-5 (je pense) ou GMT+7 pour un australien (je
pense)

l'idée c'est d'utiliser un cookie créé par javascript qui récupère
la timezone du client. php lit ensuite ce cookie et rajoute cette
valeur à time()

voila =) en esperant que ca t'aide. en ce qui me concerne ca marche
nickel, et c'est assez simple a mettre en place.

++
Avatar
Guillaume Bouchard
wrote:
j'ai eu ce souci moi aussi, et j'ai trouvé sur google (merci google)
une solution utilisant php et javascript :


Ha. Ce que tu dis est infiniement pire que de confondre les d-ronds et
les d-droits ! (J'ai toujours pas comprit pourquoi c'est grave, mais mes
profs ont comprits et cela coute 10 pts...)

Bref, il ne faut JAMAIS, JAMAIS, JAMAIS (j'ai dis JAMAIS ?) utiliser une
technologie client pour quoi que ce soit qui ne soit autre que le
confort et l'experience utilisateur(tm)(c)(r) du client.

--
Guillaume.

Avatar
Thibaut Allender
Maintenant pour répondre à ta question même si je ne la comprends pas
complètement, j'ai souvenir d'une variable de derrière les fagots, genre
putenv() de PHP_TIMEZONE ou PHP_TZ un truc du genre. Mais j'avais
peut-être encore abusé de la Guinness.


ça serait pas un truc genre putenv('TZ=EST') ?

--
thibaut allender | freelance | http://capsule.org

Avatar
CrazyCat
Thibaut Allender wrote:
ça serait pas un truc genre putenv('TZ=EST') ?


Tout à fait, merci de votre aide, il s'agit bien de:
putenv("TZ=Europe/Paris");

Si vous voulez la liste des paramètres utilisables, c'est à
<http://www.theprojects.org/dev/zone.txt>

Pour répondre à John: j'ai besoin de l'heure exacte et française à
laquelle se passe une opération, voila pourquoi je dois avoir le bon
décalage.


--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

Avatar
Daniel Dupont

J'ai un petit soucis, à savoir que pour un site sur lequel je travaille,
l'horodatage est *très important* et le serveur de dev et le serveru de
prod ne sont pas au même endroit (l'un en france, l'autre aux US).

Forcémment, quand je passe le site "fonctionnel" en prod, je me prend 6h
dans la vue.

Je voudrais éviter de reprendre toutes mes fonctions date() pour leur
rajouter 6h, y'a t'il un moyen de dire à mes scripts que je veux qu'il
compte le décalage horaire en plus?


Ceci ne s'appliquera sans doute pas ici, mais d'une manière générale,
dans le cas d'applications utilisables sur plusieurs fuseaux horaires,
ne serait-il pas plus judicieux de stocker les dates (et les heures) en
GMT ? Ainsi, quel que soit le fuseau horaire du serveur on a la même
référence.

Bien entendu, à l'exploitation (affichage notamment) de ces
informations, il faudra tenir compte du fuseau horaire pour lequel on
veut afficher ces données.

A+

--
Daniel Dupont

Avatar
boiteauxlettres
et comment ferais tu alors ?

tu as une date francaise dans une bdd qui doit etre convertie en date
us, australienne, japonaise, etc..

il est hors de question que je dise aux visiteurs "faites la difference
vous meme" ;-) j'ai bien tente de recuperer la timezone via les
en-tetes http mais soit ca n'existe pas soit je ne trouve pas. et
d'ailleurs j'ai dans mes souvenirs (flous sans doute) que si la
timezone peut effectivement etre envoye dans les headers http, ce n'est
pas toujours le cas.

j'ai regarde putenv(), mais la encore, il faut savoir de quel pays
vient le visiteur... on peut se baser sur l'ip egalement, mais c'est
pas la meilleure solution non plus

je suis curieux de lire ta reponse a ce propos

++
Avatar
John GALLET
ça serait pas un truc genre putenv('TZ=EST') ?
TZ existe ça c'est clair, mais il me semblait avoir utilisé PHP_TZ.


Un find -exec grep dans les sources ne me donne rien, mais d'une part je
n'ai pas nécessairement fait la bonne recherche, d'autre part, une
recherche sur PHP_TZ dans google donne bien des résultats.

Ca existe, mais alors quant à savoir la différence avec TZ...

a++;
JG

Avatar
ftc
et comment ferais tu alors ?

tu as une date francaise dans une bdd qui doit etre convertie en date
us, australienne, japonaise, etc..

il est hors de question que je dise aux visiteurs "faites la difference
vous meme" ;-) j'ai bien tente de recuperer la timezone via les
en-tetes http mais soit ca n'existe pas soit je ne trouve pas. et
d'ailleurs j'ai dans mes souvenirs (flous sans doute) que si la
timezone peut effectivement etre envoye dans les headers http, ce n'est
pas toujours le cas.


C'est pour cela qu'il faut stocker dans la BDD en GMT et ensuite
utiliser Javascript coté client pour faire le calcul pour l'affichage.

1 2 3 4 5