2010-11-20 8 views
0

J'ai configuré une application web pour un client. Le serveur est aux USA je crois. Le client lui-même est à Sydney. Il dit qu'il a ajouté un enregistrement à une table avec un champ d'horodatage et qu'il affiche l'horodatage sous la forme 2010-11-19 07:12:00 mais que l'heure locale réelle a été 2010-11-20 13:12:00. Donc, il est 30 hours en avance sur le temps enregistré. Cela ne semble pas correct, comment le décalage peut-il être supérieur à 24 heures? Et que dois-je changer/utiliser pour qu'il voit la bonne date/heure?PHP - Comment faire face à timezone

Éditer:
Serait-il correct d'ajouter 30 heures à l'heure actuelle avant d'insérer l'enregistrement?

+3

Le changement d'heure d'un fuseau horaire à un autre peut être supérieur à 24 heures: les fuseaux horaires réels vont de GMT + 12 à GMT-14. Le chevauchement (GMT-13 et GMT-14) est la nation insulaire du Pacifique de Kiribati, qui chevauche le méridien + -180. Naturellement, ils gardent la même date dans tout le pays, ainsi la ligne de date internationale s'avance vers l'est pour ne pas diviser la nation en deux jours. Cependant, comme vous l'avez noté, il n'y a pas de combinaison de fuseaux horaires qui donnerait un delta de 30 heures. –

+0

@David Yaw - Informations très intéressantes, merci! –

Répondre

1

La première chose à faire est de vérifier l'heure sur le serveur. Assurez-vous que c'est correct. Pour corriger le problème, vous devez connaître le décalage pour l'utilisateur. Il doit donc être enregistré dans un profil utilisateur ou s'il est stationnaire pour l'ensemble de l'application. Vous pouvez définir l'heure du serveur sur correspondre avec son fuseau horaire.

Une autre option utilise PHP DateTime Class.

Une autre option serait d'utiliser certaines offres PHP Timezone Setting functions.

Une dernière option serait de définir le timezone setting for MySQL cela vous oblige à ajouter des éléments aux options de démarrage, vous aurez donc besoin d'éditer le script de démarrage pour MySQL.

+0

Merci. Ceci est l'hébergement partagé et le réglage de fuseau horaire pour MySQL n'a pas pu être modifié. Comme Mike Baranczak l'a également noté, il s'agit probablement d'un problème double dont je ne pourrais en corriger qu'un seul. Donc, je devrais soit coder le décalage en l'ajoutant à l'heure actuelle, soit essayer de corriger le fuseau horaire ET espérer que le support corrigera l'autre coupable. –

1

Si le décalage est de 30 heures, le coupable ne peut pas être le fuseau horaire. Ou au moins, il ne peut pas être le seul coupable. Sans plus de détails, c'est ce que je peux faire de mieux.

+0

Bon point. Oui, le problème est probablement deux fois. –

+0

Mon approche préférée est de stocker tout en GMT. Si vous devez montrer l'horodatage dans un formulaire lisible par l'homme –

1

Sydney, Australie est GMT + 10. La côte est des États-Unis est GMT-5. C'est une différence de 15 heures.

Peut être une erreur de codage, où le fuseau horaire est corrigé deux fois.

+0

Bonne prise sur la possibilité d'appliquer un décalage de 15 heures deux fois, ce qui nous donnerait exactement 30 heures. Mais je ne touche pas le fuseau horaire actuellement. Quelle est ta prise? pourrait 'ne pas prendre soin de timezone' en soi créer également cet effet? –