Какой самый простой способ получить UTC-смещение в PHP по отношению к текущему (системному) часовому поясу?
UTC Offset в PHP
Ответ 1
date('Z');
возвращает смещение UTC в секундах.
Ответ 2
// will output something like +02:00 or -04:00
echo date('P');
Ответ 3
$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);
Неподтвержденный, но должен работать
Ответ 4
Я немного изменил версию того, что сделал Оскар.
date_default_timezone_set('America/New_York');
$utc_offset = date('Z') / 3600;
Это дало мне смещение от моего часового пояса, EST, до UTC, в часах.
Значение $utc_offset было -4.
Ответ 5
Просто вы можете сделать это:
//Object oriented style
function getUTCOffset_OOP($timezone)
{
$current = timezone_open($timezone);
$utcTime = new \DateTime('now', new \DateTimeZone('UTC'));
$offsetInSecs = $current->getOffset($utcTime);
$hoursAndSec = gmdate('H:i', abs($offsetInSecs));
return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
}
//Procedural style
function getUTCOffset($timezone)
{
$current = timezone_open($timezone);
$utcTime = new \DateTime('now', new \DateTimeZone('UTC'));
$offsetInSecs = timezone_offset_get( $current, $utcTime);
$hoursAndSec = gmdate('H:i', abs($offsetInSecs));
return stripos($offsetInSecs, '-') === false ? "+{$hoursAndSec}" : "-{$hoursAndSec}";
}
$timezone = 'America/Mexico_City';
echo "Procedural style<br>";
echo getUTCOffset($timezone); //-06:00
echo "<br>";
echo "(UTC " . getUTCOffset($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
echo "<br>--------------<br>";
echo "Object oriented style<br>";
echo getUTCOffset_OOP($timezone); //-06:00
echo "<br>";
echo "(UTC " . getUTCOffset_OOP($timezone) . ") " . $timezone; // (UTC -06:00) America/Mexico_City
Ответ 6
Это та же date.getTimezoneOffset()
JavaScript date.getTimezoneOffset()
:
<?php
echo date('Z')/-60;
?>
Ответ 7
date("Z")
вернет смещение UTC относительно часового пояса сервера, а не часовой пояс пользовательской машины. Чтобы получить часовой пояс пользовательской машины, вы можете использовать функцию javascript getTimezoneOffset()
, которая возвращает разницу во времени между временем UTC и местным временем в минутах.
<script type="text/javascript">
d = new Date();
window.location.href = "page.php?offset=" + d.getTimezoneOffset();
</script>
И в page.php
, который содержит ваш php-код, вы можете делать все, что хотите, с этим значением смещения. Или вместо перенаправления на другую страницу вы можете отправить значение смещения на ваш PHP скрипт через Ajax в соответствии с вашими потребностями.