在php中知道时区的本地偏移量(当DST不活跃时)



我想为用户列出所有时区及其本地UTC/GMT偏移量,而不考虑DST

我该怎么做?

我想出了这个函数来完成这项工作:

function standard_tz_offset($timezone) {
    $now = new DateTime('now', $timezone);
    $year = $now->format('Y');
    $startOfYear = new DateTime('1/1/'.$year, $timezone);
    $startOfNext = new DateTime('1/1/'.($year + 1), $timezone);
    $transitions = $timezone->getTransitions($startOfYear->getTimestamp(),
                                             $startOfNext->getTimestamp());
    foreach($transitions as $transition) {
        if(!$transition['isdst']) {
            return $transition['offset'];
        }
    }
    return false;
}

工作原理

该函数接受一个时区并创建两个DateTime对象:当前年份的1月1日00:00和下一年的1月1日00:00,它们都在该时区中指定。

然后计算这一年的夏时制转换,并返回它找到的第一个夏时制未活动的转换的偏移量。

PHP 5.3需要,因为调用DateTimeZone::getTransitions有三个参数。如果您希望这在早期版本中工作,您将不得不接受性能下降,因为大量的转换将由PHP生成(在这种情况下,您不需要创建$startOfYear$startOfNext日期)。

我也测试了这个与时区不观察DST(例如Asia/Calcutta),它也适用于那些。

测试:

$timezone = new DateTimeZone("Europe/Athens");
echo standard_tz_offset($timezone);

相关内容

  • 没有找到相关文章

最新更新