2008-10-11 13 views

Odpowiedz

59
date('Z'); 

powraca UTC przesunięcie w sekundach.

+1

Dzięki. Niestety PHP wymaga wywołania date_default_timezone_set(). Jeśli ustawisz to na GMT, daty z bazy danych pozostaną w czasie lokalnym, ale data ("Z") zwróci zero. Jeśli ustawisz go na strefę czasową serwera, możesz równie dobrze zakodować przesunięcie serwera z GMT w pliku włączającym. To niesamowite, że nie ma na to prostego sposobu. EDYCJA: Odkryłem, że możesz zrobić date_default_timezone_set (date_default_timezone_get()). Jak beznadziejnie! – Oscar

+0

data ("Z") zwraca przesunięcie GMT w sekundach – Dahomz

+0

Zwraca 0. – Adry

16

timezone_offset_get()

$this_tz_str = date_default_timezone_get(); 
$this_tz = new DateTimeZone($this_tz_str); 
$now = new DateTime("now", $this_tz); 
$offset = $this_tz->getOffset($now); 

Nietestowane, ale powinien działać

+0

Przydatne jeśli używasz klasy DateTime w PHP 5. Ale nie jestem. –

-2

date("Z") zwróci przesunięcie UTC względem strefy czasowej serwera, a nie strefy czasowej maszyny użytkownika. Aby uzyskać strefę czasową maszyny użytkownika, można użyć funkcji javascript getTimezoneOffset(), która zwraca różnicę czasu między czasem UTC i czasem lokalnym, w minutach.

<script type="text/javascript"> 
    d = new Date(); 
    window.location.href = "page.php?offset=" + d.getTimezoneOffset(); 
</script> 

I page.php która posiada swój kod php, możesz robić, co chcesz z tym wartość offsetu. Zamiast przekierowywania na inną stronę, możesz wysłać wartość odsunięcia do skryptu php za pośrednictwem Ajax, zgodnie z Twoimi potrzebami.

+1

OP jawnie zapytał * "względem aktualnej strefy czasowej (systemowej)?" * – Madbreaks

+1

OP zapytał o rozwiązanie PHP, a nie JS –

10

Zrobiłem nieznacznie zmodyfikowaną wersję tego, co zrobił Oscar.

date_default_timezone_set('America/New_York'); 
$utc_offset = date('Z')/3600; 

To dało mi przesunięcie z mojej strefy czasowej, EST, do UTC, w godzinach.

Wartość $ utc_offset wynosiła -4.

11

data echa ("P"); // wyświetli coś +02: 00 lub -04: 00

1

To samo JavaScript date.getTimezoneOffset() funkcja:

<?php 
echo round(date('Z')/-60,2); 
?> 
+0

["date (" Z ') '] (http://php.net/manual/en/function.date.php) jest przesunięciem *« Strefa czasowa w sekundach. »* Znak minus powinien pozostać ... Podziel przez" 60 ". Nie przez "-60" Następnie wyświetli przesunięcie strefy czasowej serwera. OP chciał (w 2008 r.) Porównać offset lokalnego użytkownika z tą wartością, o której mówisz. –

+0

@LouysPatriceBessette 'getTimezoneOffset()' funkcja w javascript daje dokładnie taką wartość (-180). –

+0

Dotyczy to [JavaScript getTimezoneOffset()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset) ... I to w kilka minut zamiast sekundy. Data PHP nie wykonuje tej bezwzględnej inwersji wartości. –