49

相对于当前(系统)时区,在 PHP 中获取 UTC 偏移的最简单方法是什么?

4

7 回答 7

92
  date('Z');

以秒为单位返回 UTC 偏移量。

于 2008-10-11T01:06:27.680 回答
47
// will output something like +02:00 or -04:00
echo date('P');
于 2016-03-15T20:17:31.887 回答
22

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

未经测试,但应该可以工作

于 2008-10-11T01:06:20.673 回答
19

我对奥斯卡所做的做了一个稍微修改的版本。

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

这给了我从我的时区 EST 到 UTC 的偏移量,以小时为单位。

$utc_offset 的值为 -4。

于 2015-06-09T15:08:09.687 回答
5

这是相同的 JavaScriptdate.getTimezoneOffset()函数:

<?php
echo date('Z')/-60;
?>
于 2017-05-29T21:33:49.260 回答
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
于 2018-03-23T17:31:57.570 回答
-3

date("Z")将返回相对于服务器时区而不是用户机器时区的 UTC 偏移量。要获取用户的机器时区,您可以使用 javascriptgetTimezoneOffset()函数返回 UTC 时间和本地时间之间的时差,以分钟为单位。

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

并且page.php其中包含您的 php 代码,您可以使用该偏移值做任何您想做的事情。或者,您可以根据需要通过 Ajax 将偏移值发送到您的 php 脚本,而不是重定向到另一个页面。

于 2013-01-05T15:55:42.893 回答