2010-09-23 30 views
1

Columbus, Ohio est dans le fuseau horaire EDT mais PHP :: DateTime utilise ces php timezones et je n'arrive pas à en trouver un qui me donne l'heure exacte. America/New_York est éteint d'une heure, car jusqu'à EDT se termine, nous sommes +5 pas 4.php Fuseau horaire DateTime pour Columbus Ohio

Je suis confus. Par exemple en ce moment à 11h26 en gros et je reviens à 10h26. Le serveur a le bon temps, j'ai essayé d'utiliser date_default_timezone_set ("EDT") mais ce n'est pas autorisé.

$fromZone = 'Europe/London'; 
$toZone = 'American/New_York'; 
function adjustTime($time, $fromZone, $toZone){ 
$date = new DateTime($time, new DateTimeZone($fromZone)); 
$date->setTimezone(new DateTimeZone($toZone)); 
return $date->format('Y-m-d H:i:s'); 
} 

Par exemple: je reçois d'un service Web de savon « 2010-09-23 15:25:56 » qui est l'Europe/heure de Londres et il devrait être transformé en « 2010-09-23 11:25 : 56 "qui est l'heure EDT. J'essayais d'utiliser la fonction ci-dessus et c'est de retour "2010-09-23 10:25:56"

Répondre

1

"America/New_York" devrait vous donner la bonne valeur, étant donné qu'au moment de cette écrire c'est 11.36 in New York aussi. Notez que c'est UTC-4 (il est actuellement 15h35 UTC). En heure normale, vous êtes UTC-5.

EDT n'est pas vraiment un "fuseau horaire" complet - c'est juste la partie de la lumière du jour. Un nom de fuseau horaire comme "America/New_York" donne la complète implémentation de fuseau horaire. Maintenant, pour savoir pourquoi votre serveur donne une mauvaise valeur, c'est différent ... si vous demandez l'heure UTC, qu'est-ce que cela vous donne?

EDIT: Comme mentionné dans les commentaires, le correctif est de convertir UTC, et non de l'Europe/Londres:

$date = new DateTime($time, new DateTimeZone('UTC')) 

(Il peut y avoir une meilleure façon de le faire, je ne suis pas un PHP développeur.)

+0

Cela ne fonctionne pas cependant. Utiliser America/New_York me donne 10h26. – Chris

+0

@Chris: Mais étant donné que cela * devrait * fonctionner, cela signifie que vous devriez chercher ailleurs le problème ... comme vérifier que l'idée du serveur UTC est correcte. Il serait également utile si vous publiez le code que vous utilisez pour récupérer l'heure. –

+0

Ce que je fais est de récupérer des chaînes contenant l'heure et la date d'un service web via du savon basé sur l'heure Europe/Londres. Je voulais prendre ceci par exemple "2010-09-23 15:25:56" qui devrait devenir "2010-09-23 11:25:56". Je vais mettre à jour avec mon code qui effectue la transformation. – Chris