Comment faire pour convertir entre des fuseaux horaires en PHP à l'aide de la classe DateTime?
Je suis en train de convertir le temps entre l'heure UTC et l'heure UTC à l'heure actuelle de la zone.
Voici ce que j'ai fait:
$schedule_date = new DateTime($triggerOn, new DateTimeZone('UTC') );
$triggerOn = $schedule_date->format('Y-m-d H:i:s');
echo $triggerOn;
La valeur de sortie ne change pas la seule chose qui change dans le format.
la chaîne $triggerOn
a été généré sur la base de America/Los_Angeles
fuseau horaire
C'est ainsi que ma chaîne, comme avant et après:
BEFORE 04/01/2013 03:08 PM
AFTER 2013-04-01 15:08:00
De sorte que le problème ici est que DateTime ne convertit pas à l'UTC.
- Ce n'
$triggerOn
contenir avant de vous passer ànew DateTime()
? - DateTime() constructeur s'attend à ce premier argument à la fois. Peut-être que votre $triggerOn n'est pas une bonne valeur de temps.
- $triggerOn valeur de l'id de 04/01/2013 03:08 PM
- Et exactement comment vous attendez-vous la chaîne
"04/01/2013 03:08 PM"
de contenir de l'information "America/Los_Angeles"? - que dois ma chaîne pour que cela fonctionne?
- Facile:
"04/01/2013 03:08 PM America/Los_Angeles"
. Ou alternativeley"04/01/2013 03:08 PM -0700"
(je ne suis pas sûr de savoir comment bien le DateTime constructeur analyse de fuseau horaire identifiants). Mais Mike solution est probablement mieux adapté pour vous.
Vous devez vous connecter pour publier un commentaire.
Ce que vous cherchez est: est-ce
setTimeZone
modifications de l'objet chaîne de fuseau horaire ainsi que la valeur de type datetime. le format est juste de ce qui est utilisé pour obtenir la chaîne. Ce n'est pas commesetTimeZone
seulement des changements de fuseau horaire de la propriété, de l'adn, puis le format recrache - le numérique réelle valeur temps touché lors de l'exécution d'setTimeZone
.format
(ou une autre sortie de chaîne) permet d'afficher l'heure dans le nouveau fuseau horaire spécifié (représentant le inchangé réel de temps). Mike exemple serait plus claire si l'on a également montré de sortie avec fuseau horaire:$schedule_date->format('Y-m-d H:i:s T');
ou$schedule_date->format('Y-m-d H:i:s O');
à la fois avant et après. Ensuite, nous voyons clairement qu'ils sont des représentations équivalentes d'un même temps.Vous consommez de la date/de l'heure et réglage de la zone horaire correctement, mais avant de formater la date /heure, vous n'êtes pas le réglage de la sortie désirée fuseau horaire. Voici un exemple qui accepte un fuseau horaire UTC, et convertit la date et le temps de l'America/Los_Angeles fuseau horaire:
Créer de la date à l'aide du fuseau horaire local, puis d'appeler
DateTime::setTimeZone()
de le changer.