Comment puis-je obtenir le Temps Moyen de Greenwich en PHP?
J'ai un serveur qui est définie à l'est, et de tous les enregistrements dans la base de données sont définis à l'EST. Je voudrais savoir comment le configurer à l'heure GMT. Je veux offrir une option de fuseau horaire pour mes utilisateurs.
Vous devez vous connecter pour publier un commentaire.
Dans n'importe quel fuseau horaire GMT le serveur est, ici, est un moyen extrêmement facile d'obtenir l'heure et la date pour n'importe quel fuseau horaire. Cela se fait avec la
time()
etgmdate()
fonctions. Legmdate()
fonctionner normalement nous donne l'heure GMT, mais en faisant un tour avec letime()
fonction, nous pouvons obtenir GMT+N ou GMT-N, signifie que nous pouvons obtenir le temps pour n'importe quel fuseau horaire GMT.Par exemple, si vous avez le temps de GMT+5, vous pouvez le faire comme suit
Maintenant, si vous avez le temps de GMT-5, vous pouvez juste soustraire le décalage à partir de la
time()
au lieu d'ajouter, comme dans l'exemple suivant où nous obtenons le temps de GMT-4$offset=5*60*60
code. Pas l'idéal, surtout si vous avez besoin pour tenir compte de l'heure d'été ou les clusters de serveurs qui s'étendent sur les fuseaux horaires.Je fortement suggérons d'éviter de jouer avec des timestamps UNIX pour la faire ressembler à un fuseau horaire différent. C'est une leçon que j'ai appris à la dure, trop de fois.
Un timestamp est le nombre de secondes depuis Minuit le 1er janvier 1970, à l'heure GMT. Il n'a pas d'importance où vous êtes dans le monde, un timestamp représente l'exact même moment dans le temps, indépendamment des fuseaux horaires. Oui, le timestamp "0" signifie 10h 1/1/70 en Australie, Minuit 1/1/70 à Londres et 5pm 31/12/69 dans LA, mais cela ne signifie pas que vous pouvez simplement ajouter ou soustraire des valeurs et de garantir l'exactitude.
Le golden exemple en peluche qui m'chaque année depuis trop longtemps, était quand l'heure d'été serait des cultures. L'heure d'été signifie qu'il y a "les heures de l'horloge", qui n'existent pas dans certaines parties du monde. Par exemple, dans la plupart des régions des états-unis, il n'y avait pas de temps de 2:01 2 avril 2006.
Assez quasi-intelligible rodomontades bien. Mon conseil est de stocker vos dates dans la base de données des timestamps, et puis...
date()
gmdate()
date_default_timezone_set()
et puisdate()
Par exemple,
Cela vous permettra de garder vos valeurs propres (vous n'avez pas à vous soucier de l'ajout de décalages, et puis en soustrayant avant l'enregistrement), il s'engage à respecter l'heure d'été règles, et vous aussi n'avez pas à même de rechercher le fuseau horaire de l'endroit où vous voulez.
time()
, alors vous êtes en fait l'enregistrement d'un autre temps. Avec le décalage, comment est-elle le reflet de l'heure d'été? Quand pensez-vous changer? Comment savez-vous quand l'heure d'été commence et se termine pour cette région en particulier? Si vous utilisezdate_default_timezone_set
alors vous n'avez pas à vous soucier de tout cela.Il est important de noter que si vous utilisez date('Z') pour convertir une date qui est stocké dans une base de données que vous donnez à la date de l'horodatage comme deuxième argument, sinon votre résultat ne sera pas précis.
par exemple
Au royaume-UNI, parfois, date('Z') donnera 3600, parfois il va donner 0.
Donne 0
Donne 3600
Donc, purement à l'aide de la fonction strtotime($dbDateValue) - date('Z') peut être mal
Au lieu d'utilisation:
Ce cours s'appuie sur PHP et la base de données à la fois être réglé sur le même fuseau horaire.
Voici une liste des fuseaux horaires différentes de GMT, espérons que cela est utile!
Merci!
J'ai été inspiré par cette question d'écrire une autre fonction pour convertir un timestamp à un fuseau horaire.
Donc, de CORRIGER les étapes de la procédure d'enregistrement, d'affichage (convertir) temps:
Résultats:
$date_input = 2012-08-17 12:00:00
$date_input = 2012-02-17 12:00:00
J'ai décidé de getLTime_nonclass en espérant faire la conversion plus rapide que l'utilisation des classes.
Tout ce que je demande est de confirmer que getLTime_nonclass est un remplacement valable pour getLTime_class.
N'hésitez pas à exprimer votre opinion. Grâce
Beaucoup de temps, il est une tâche si nécessaire un temps record en DB en GMT+0, mais la fonction time() retourne l'heure du serveur. Ses possible de résoudre par la fonction suivante: