Quels outils date et heure php à utiliser pour la compensation GMT
Question
Il semble qu’il existe de nombreuses façons d’approcher la date et l’heure avec un massage en php. En général, je ne traite que de l’heure locale. Aujourd'hui, je dois travailler en UTC.
J'interroge une API, les données qu'ils me fournissent à propos d'un enregistrement arbitraire sont les suivantes: créé: jeu., 18 juin 2009 21:44:49 +0000 * Documenté comme 'heure de création de l'enregistrement UTC'
utc_offset: -28800 * Différence entre les utilisateurs re
Je dois convertir cela en une simple chaîne pour indiquer à l'utilisateur l'heure et la date auxquelles les données ont été soumises à l'heure locale.
Je crois que ce qui précède se traduit, par exemple, en Californie: Jeudi 18 juin 2009 14h44:49
Mon objectif est d’obtenir une valeur temporelle que je peux transmettre à date () pour un formatage aisé dans une "jolie". format.
Est-ce vraiment aussi simple que de convertir le temps créé ci-dessus en secondes depuis une époque, d’ajouter le décalage puis de le passer à date ()? Quel est le gothcha à surveiller?
$created_time = 'Thu, 18 Jun 2009 21:44:49 +0000';
$utc_offset = -28800;
$seconds = strtotime($created_time);
$localized_time = $seconds + $utc_offset;
echo date(DATE_RFC822, $localized_time);
Merci
La solution
PHP devrait faire la chose automatiquement pour vous. Je peux aussi fortement recommander d'utiliser l'objet DateTime à la place.
$ dt = new DateTime ($ created_time);
echo $ dt- & format (DATE_RFC2822);
Les fonctions de date et d'heure de PHP sont sensibles au fuseau horaire. Assurez-vous que vous utilisez une version récente de PHP, car beaucoup de travail a été fait pour améliorer ces systèmes.
Autres conseils
Vous pouvez utiliser date_default_timezone_set pour passer d'un fuseau horaire à l'autre. Dans votre cas, vous transmettriez les informations de fuseau horaire du profil de l'utilisateur. Comme recommandé par Evert, si vous utilisez PHP 5 & 5.2, utilisez le fichier plus avancé DateTime. classe.
<?php
echo date('h:i:s')."\n";
date_default_timezone_set('Europe/Paris');
echo date('h:i:s')."\n";
date_Default_timezone_set('UTC');
echo date('h:i:s')."\n";