2009-09-23 13 views
7

W PHP, w jaki sposób uzyskać bieżący czas, w UTC, bez twardego kodowania wiedzy o tym, gdzie jest mój dostawca hostingu?Jak dokładnie uzyskać aktualny czas UTC przez strtotime?

Na przykład, próbowałem następujące:

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

i uważają, że raporty czas, że jest jedną godzinę do przodu od rzeczywistego czasu UTC. Próbowałem tego na dwóch różnych dostawcach hostingu w dwóch różnych strefach czasowych z tymi samymi wynikami.

Czy istnieje wiarygodny (i, miejmy nadzieję, czystszy) sposób, aby dokładnie uzyskać czas UTC?

Ograniczam się do PHP 4.4.9, więc nie mogę używać nowych rzeczy z timezone dodanych do PHP5.

Dzięki, z góry.

+0

tylko, aby sprawdzić, czy dostawców hostingu w tej samej strefie czasowej, jak jesteś? Możesz spróbować sprawdzić wyjście daty ("T"), aby zobaczyć. – Tom

+1

@ Tom: To by działało, gdyby OP mógł założyć, że jego dostawca jest w określonym regionie. Problem z 'date (" T ")' jest taki, że na przykład "EST" może pochodzić z północnoamerykańskiego EST lub australijskiego EST. – MitMaro

+0

Po prostu szukałem informacji. Poniżej znajdziesz moją odpowiedź na rozwiązanie, które wydaje się działać we wszystkich przypadkach. Twoja uwaga na temat strefy czasowej. jest dobrze zrobione i coś, z czym nigdy nie miałem do czynienia, ponieważ wszystkie moje serwery są w USA – Tom

Odpowiedz

8

To wydaje się działać dla mnie. Oczywiście, trzeba go przetestować na PHP 4, ponieważ wszystkie moje serwery PHP 5, ale ręczne roszczenia to powinno działać na PHP 4.

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

Pierwszy raz dokoła, zapomniałem, że data może zmień między wywołaniem czasu() i datą().

+0

Znacznie lepiej niż przy użyciu 'date (" T ")'. Warto +1. – MitMaro

+0

Dzięki, a ja dałem ci +1 za komentarz powyżej. – Tom

+0

Dzięki, to działa. :) – Dave

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

Dzięki za odpowiedź. Chociaż to nie działa dla PHP 4.4.9, działa dobrze na innym PHP 5.2. – Dave

+0

Przepraszam, najwyraźniej moje czytanie ze zrozumieniem było wyłączone, kiedy czytałem twoje pytanie. Cieszę się, że pomogłem. – GZipp

+2

, ale był jednak cenny dla innych osób – shealtiel

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

gmmktime: uniksowy znacznik czasu dla daty GMT

0

Czy to praca dla PHP 4.4.9?

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

lub jeśli chcesz go do określonej daty:

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