2009-09-23 8 views
7

En PHP, comment est-ce que j'obtiens l'heure actuelle, en UTC, sans savoir exactement où est mon hébergeur?Comment calculer précisément l'heure UTC actuelle via strtotime?

Par exemple, j'ai essayé les éléments suivants:

time() + strtotime('January 1, 2000')-strtotime('January 1, 2000 UTC') 

et trouver qu'il rapporte un temps qui est à une heure à l'avance UTC réelle. J'ai essayé cela sur deux fournisseurs d'hébergement différents dans deux fuseaux horaires différents avec les mêmes résultats.

Existe-t-il un moyen fiable (et, espérons-le, plus propre) d'obtenir précisément l'heure UTC?

Je suis limité à PHP 4.4.9 donc je ne peux pas utiliser le nouveau composant timezone ajouté à PHP5.

Merci d'avance.

+0

Juste pour vérifier, sont les fournisseurs d'hébergement dans le même fuseau horaire que vous êtes? Vous pourriez essayer de vérifier la sortie de date ("T") pour voir. – Tom

+1

@Tom: Cela fonctionnerait si le PO peut supposer que son fournisseur est dans une certaine région. Le problème avec 'date (" T ")' est que, par exemple "EST" pourrait être par l'EST nord-américain ou l'EST australien. – MitMaro

+0

Je pêchais juste pour l'information. Voir ma réponse ci-dessous pour une solution qui semble fonctionner dans tous les cas. Votre point sur le fuseau horaire abrev. est bien pris et quelque chose que je n'ai jamais eu à traiter puisque tous mes serveurs sont aux États-Unis. – Tom

Répondre

8

Cela semble fonctionner pour moi. Bien sûr, vous aurez besoin de le tester sur PHP 4 puisque tous mes serveurs ont PHP 5, mais les demandes manuelles cela devrait fonctionner pour PHP 4.

$t = time(); 
$x = $t+date("Z",$t); 
echo strftime("%B %d, %Y @ %H:%M:%S UTC", $x); 

première fois, j'ai oublié que la date pourrait changer entre l'appel à time() et date().

+0

Beaucoup mieux que d'utiliser 'date (" T ")'. Ça vaut bien un +1. – MitMaro

+0

Merci, et je vous avais donné un +1 pour le commentaire ci-dessus. – Tom

+0

Merci, cela fonctionne. :) – Dave

14
$time = new DateTime('now', new DateTimeZone('UTC')); 
echo $time->format('F j, Y H:i:s'); 
+0

Merci pour votre réponse. Bien que cela ne fonctionne pas pour PHP 4.4.9, cela fonctionne très bien sur l'autre PHP 5.2. – Dave

+0

Désolé, apparemment ma compréhension de lecture était éteint quand j'ai lu votre question. Heureux d'avoir aidé de toute façon. – GZipp

+2

mais était néanmoins précieux pour d'autres personnes – shealtiel

0
$utcTtime = gmmktime(); 
$unixTimestamp = time(); 

gmmktime: timestamp UNIX pour une date GMT

0

Est-ce que ce travail pour php 4.4.9?

echo gmdate('Y-m-d H:i:s', time()); 

ou si vous le voulez pour une date précise:

$time = strtotime('January 1, 2000 UTC'); 
if($time){ 
    echo gmdate('Y-m-d H:i:s', $time); 
}