相对于当前(系统)时区,在PHP中获取UTC偏移的最简单方法是什么?
答案 0 :(得分:72)
date('Z');
以秒为单位返回UTC偏移量。
答案 1 :(得分:23)
// will output something like +02:00 or -04:00
echo date('P');
答案 2 :(得分:17)
$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);
未经测试,但应该有效
答案 3 :(得分:13)
我做了奥斯卡所做的略有修改的版本。
date_default_timezone_set('America/New_York');
$utc_offset = date('Z') / 3600;
这给了我从时区EST到UTC的偏差,以小时为单位。
$ utc_offset的值为-4。
答案 4 :(得分:4)
只需你可以这样做:
//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
答案 5 :(得分:2)
这是一个JavaScript date.getTimezoneOffset()
函数:
<?php
echo date('Z')/-60;
?>
答案 6 :(得分:-4)
date("Z")
将返回相对于服务器时区而不是用户的计算机时区的UTC偏移量。要获取用户的计算机时区,您可以使用javascript getTimezoneOffset()
函数返回UTC时间和本地时间之间的时差,以分钟为单位。
<script type="text/javascript">
d = new Date();
window.location.href = "page.php?offset=" + d.getTimezoneOffset();
</script>
在保存您的PHP代码的page.php
中,您可以使用该偏移值执行任何操作。或者,不是重定向到另一个页面,您可以根据需要通过Ajax将偏移值发送到您的php脚本。