2011-06-23 5 views
2

J'ai un site qui a la liste des magasins dans différents pays (différents fuseaux horaires), et il devrait afficher lorsque le magasin est OUVERT ou FERMÉ par les heures de travail.Comment régler le fuseau horaire dans PHP

J'ai javascript qui obtient décalage horaire GMT DEFAULT GMT lorsque l'heure d'été n'est pas définie, mettez-le dans mysql, et cette partie fonctionne correctement.

Mon fuseau horaire GMT + 1 (et maintenant il est l'heure d'été actif, il est donc 1 heure maintenant)

J'utilise PHP pour modifier la zone en utilisant ceci:

date_default_timezone_set('Etc/GMT+1'); 
echo date('h'); 

Temps ici: 22 heures

heure GMT: 20 heures

Et ce retour de code: 19 heures

Donc, il est comme il augmente plutôt de 1, il diminue, et plus il n'y a pas d'heure d'été ...

Quelqu'un peut-il me dire ce qui se passe ici? Est-ce bug php ou quelque chose de mal sur le serveur?

Merci ...

Répondre

2

Je suis actuellement un petit rire parce que j'avais récemment similar problem. Malheureusement, les fuseaux horaires Etc/GMT sont obsolètes. Ils cassent. Ma recommandation personnelle? Utilisez simplement HH: MM ou réglez-le en fonction de la ville (les villes ne nécessitent pas d'ajustements de l'heure d'été!)

+0

Je ne peux pas obtenir la ville, seul décalage GMT ... Et je ne peux pas utiliser le temps global et augmenter/diminuer par décalage car il ne sera pas correct car parfois l'heure d'été sont définies sur mon serveur, et stocke les lieux n'est pas, ou sinon ... – SharkTheDark

+0

Etc/GMT est le temps global +/- un décalage. Si le temps d'économie de votre serveur n'est pas correctement défini, vous devriez pouvoir le corriger en le définissant sur un fuseau horaire de la ville. Il compensera GMT de manière appropriée dans ce cas. – cwallenpoole

+0

Oui, j'ai remarqué qu'il a +/- inversé ... Mais encore il n'y a pas d'heure d'été ... Puis-je ajouter pour chaque ville GMT + X qui correspondra à ce fuseau horaire et appliquer l'heure d'été par cela? Est-ce que ce sera correct? – SharkTheDark

0

Peut-être que la date ('I') pourrait aider dans cette situation.
Sauf s'il existe une option permettant de définir une liste de recherche [décalage GMT] - [nom du fuseau horaire]. Ensuite, il sera possible d'ajuster le fuseau horaire en utilisant les classes DateTime \ DateTimeZone.

+0

date ('I') montrera est-il à l'heure d'été ou pas ... Et c'est 0, comme l'heure est, sinon il y aura +1 compte ... – SharkTheDark

Questions connexes