Jaki jest najłatwiejszy sposób uzyskania przesunięcia UTC w PHP, względem aktualnej strefy czasowej (systemowej)?Przesunięcie UTC w PHP
Odpowiedz
date('Z');
powraca UTC przesunięcie w sekundach.
$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ć
Przydatne jeśli używasz klasy DateTime w PHP 5. Ale nie jestem. –
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.
OP jawnie zapytał * "względem aktualnej strefy czasowej (systemowej)?" * – Madbreaks
OP zapytał o rozwiązanie PHP, a nie JS –
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.
data echa ("P"); // wyświetli coś +02: 00 lub -04: 00
To samo JavaScript date.getTimezoneOffset()
funkcja:
<?php
echo round(date('Z')/-60,2);
?>
["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. –
@LouysPatriceBessette 'getTimezoneOffset()' funkcja w javascript daje dokładnie taką wartość (-180). –
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. –
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
data ("Z") zwraca przesunięcie GMT w sekundach – Dahomz
Zwraca 0. – Adry