获得命名时区的UTC偏移的更有效方法(例如,US / Central的-21600)

时间:2014-12-22 20:25:47

标签: php datetime timezone timezone-offset

是否有更有效的方法将US/Central等时区字符串转换为-21600而不是以下内容?也许一个不需要加载DateTimes和比较?

echo getUtcOffset('America/Chicago');  // returns -21600
echo getUtcOffset('America/New_York'); // returns -18000
echo getUtcOffset('Indian/Mauritius'); // returns 14400
echo getUtcOffset('Europe/London');    // returns 0
function getUtcOffset($tz) {
    $utc_dtz = new DateTimeZone('UTC');
    $remote_dtz = new DateTimeZone($tz);
    $utc_dt = new DateTime("now", $utc_dtz);
    $remote_dt = new DateTime("now", $remote_dtz);
    $offset = $remote_dtz->getOffset($remote_dt) - $utc_dtz->getOffset($utc_dt);
    return $offset;
}

1 个答案:

答案 0 :(得分:2)

应该这么简单:

  

DateTime::getOffset

     

返回时区偏移量。

     

返回成功时的UTC时区偏移量(以秒为单位)或FALSE(以秒为单位)   故障。

function getUtcOffset1($tz) {
    $datetime = new DateTime("now", new DateTimeZone($tz));
    return $datetime->getOffset();
}
echo getUtcOffset1('America/Chicago');  // returns -21600
echo getUtcOffset1('America/New_York'); // returns -18000
echo getUtcOffset1('Indian/Mauritius'); // returns 14400