2009-09-23 16 views
7

En PHP, ¿cómo obtengo la hora actual, en UTC, sin un conocimiento de codificación dura de dónde está mi proveedor de hosting?¿Cómo obtengo con precisión la hora UTC actual a través de strtotime?

Por ejemplo, he intentado lo siguiente:

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

y encontrar que informa de un tiempo que es una hora antes de la hora UTC real. Intenté esto con dos proveedores de hosting diferentes en dos zonas horarias diferentes con los mismos resultados.

¿Existe alguna manera confiable (y, con suerte, más limpia) de obtener con precisión la hora UTC?

Estoy limitado a PHP 4.4.9 así que no puedo usar las nuevas cosas de la zona horaria agregadas a PHP5.

Gracias, de antemano.

+0

sólo para comprobar, son los proveedores de alojamiento en la misma zona horaria que usted es? Puede intentar verificar el resultado de la fecha ("T") para ver. – Tom

+1

@Tom: Eso funcionaría si el OP puede asumir que su proveedor se encuentra en cierta región. El problema con 'date (" T ")' es que, por ejemplo, "EST" podría ser emitido por la EST norteamericana o la EST australiana. – MitMaro

+0

Solo estaba buscando información. Consulte mi respuesta a continuación para encontrar una solución que parece funcionar en todos los casos. Tu punto sobre la zona horaria abrev. está bien tomado y es algo con lo que nunca he tenido que lidiar, ya que todos mis servidores están en los EE. UU. – Tom

Respuesta

8

Esto parece funcionar para mí. Por supuesto, tendrá que probarlo en PHP 4 ya que todos mis servidores tienen PHP 5, pero las reclamaciones manuales Esto debería funcionar para PHP 4.

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

primera vez, se me olvidó que la fecha podría cambiar entre la llamada a la hora() y la fecha().

+0

Mucho mejor que usar 'date (" T ")'. Bien vale la pena un +1. – MitMaro

+0

Gracias, y le había dado un +1 por el comentario anterior. – Tom

+0

Gracias, funciona. :) – Dave

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

Gracias por su respuesta. Aunque esto no funciona para PHP 4.4.9, funciona bien en el otro PHP 5.2. – Dave

+0

Lo siento, al parecer, mi comprensión de lectura no funcionaba cuando leí tu pregunta. Me alegro de haber ayudado de todos modos. – GZipp

+2

pero fue valioso para otras personas – shealtiel

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

gmmktime: Obtener marca de tiempo Unix para una fecha GMT

0

¿Esto funciona para PHP 4.4.9?

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

o si desea para una fecha específica:

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