Какой самый простой способ получить UTC-смещение в PHP по отношению к текущему (системному) часовому поясу?
date('Z');
возвращает смещение UTC в секундах.
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);
Непроверенный, но должен работать
эхо-дата ('P'); // выводит что-то +02: 00 или -04: 00
Я сделал слегка измененную версию того, что сделал Оскар.
date_default_timezone_set('America/New_York'); $utc_offset = date('Z') / 3600;
Это дало мне смещение от моего часового пояса, EST, до UTC, в часах.
Значение $ utc_offset было -4.
Это же date.getTimezoneOffset()
JavaScript:
<?php echo round(date('Z')/-60,2); ?>
date("Z")
возвращает смещение UTC по отношению к часовому поясу сервера, а не к часовому часовому механизму пользователя. Чтобы получить часовой пояс пользователя, вы можете использовать getTimezoneOffset()
javascript getTimezoneOffset()
которая возвращает разницу во времени между временем UTC и местным временем в минутах.
<script type="text/javascript"> d = new Date(); window.location.href = "page.php?offset=" + d.getTimezoneOffset(); </script>
И в page.php
который содержит ваш php-код, вы можете делать все, что хотите, с этим значением смещения. Или вместо перенаправления на другую страницу вы можете отправить значение смещения в ваш php-скрипт через Ajax в соответствии с вашими потребностями.