2009-09-23 10 views
7

In PHP, come ottengo l'ora corrente, in UTC, senza una conoscenza approfondita del codice su dove si trova il mio provider di hosting?Come ottenere con precisione l'ora UTC corrente tramite strtotime?

Per esempio, ho provato la seguente:

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

e scoprire che riporta un tempo che è un'ora prima del tempo UTC attuale. Ho provato questo su due diversi provider di hosting in due diversi fusi orari con gli stessi risultati.

Esiste un modo affidabile (e, si spera, più pulito) per ottenere con precisione l'ora UTC?

Sono limitato a PHP 4.4.9, quindi non posso utilizzare il nuovo fuso orario aggiunto a PHP5.

Grazie, in anticipo.

+0

solo per controllare, sono i fornitori di hosting nello stesso fuso orario come sei? Potresti provare a controllare l'output della data ("T") per vedere. – Tom

+1

@Tom: Funzionerebbe se l'OP può presupporre che il suo provider si trovi in ​​una determinata regione. Il problema con 'date (" T ")' è che per esempio "EST" potrebbe essere il nordamericano EST o l'EST australiano. – MitMaro

+0

Stavo solo pescando per informazioni. Vedi la mia risposta qui sotto per una soluzione che sembrerebbe funzionare in tutti i casi. Il tuo punto sul fuso orario. è ben preso e qualcosa che non ho mai avuto a che fare visto che tutti i miei server sono negli Stati Uniti – Tom

risposta

8

Questo sembra funzionare per me. Naturalmente, avrete bisogno di testarlo su PHP 4 dal momento che tutti i miei server hanno PHP 5, ma rivendicazioni manuali questo dovrebbe funzionare per PHP 4.

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

prima volta intorno, ho dimenticato che la data potrebbe cambia tra la chiamata all'ora() e la data().

+0

Molto meglio di usare 'date (" T ")'. Vale la pena un +1. – MitMaro

+0

Grazie, e ti ho dato un +1 per il commento sopra. – Tom

+0

Grazie, funziona. :) – Dave

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

Grazie per la risposta. Sebbene questo non funzioni per PHP 4.4.9, funziona bene sull'altro PHP 5.2. – Dave

+0

Scusa, a quanto pare la mia comprensione della lettura era off quando ho letto la tua domanda. Sono contento di aver aiutato comunque. – GZipp

+2

ma era comunque prezioso per altri – shealtiel

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

gmmktime: Restituisce un timestamp Unix per una data GMT

0

Fa questo lavoro per PHP 4.4.9?

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

o se lo vuoi per una data specifica:

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