有没有比以下更有效的方法来将时区字符串(如US/Central
转换为-21600
(?也许不需要同时加载日期时间和比较?
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;
}
它应该像这样简单:
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