Смещение UTC в PHP - PullRequest
       55

Смещение UTC в PHP

33 голосов
/ 11 октября 2008

Какой самый простой способ получить смещение UTC в PHP относительно текущего (системного) часового пояса?

Ответы [ 7 ]

72 голосов
/ 11 октября 2008
  date('Z');

возвращает смещение UTC в секундах.

23 голосов
/ 15 марта 2016
// will output something like +02:00 or -04:00
echo date('P');
17 голосов
/ 11 октября 2008

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);

Не проверено, но должно работать

14 голосов
/ 09 июня 2015

Я сделал слегка измененную версию того, что сделал Оскар.

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

Это дало мне смещение от часового пояса, EST, до UTC, в часах.

Значение $ utc_offset было -4.

4 голосов
/ 23 марта 2018

Просто вы можете сделать это:

//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
2 голосов
/ 30 мая 2017

Это тот же JavaScript date.getTimezoneOffset() функция:

<?php
echo date('Z')/-60;
?>
0 голосов
/ 05 января 2013

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 в соответствии с вашими потребностями.

...