我正在尝试使用PHP的date_default_timezone_set函数表示不同时区的UTC时间戳。夏令时刚刚在这里(NZ)和澳大利亚开始,而我得到的结果好坏参半...
这是一些测试代码...
date_default_timezone_set('NZ');
print '<p>NZ time is ' . date('Y-m-d H:i:s T (I)') . '</p>';
date_default_timezone_set('Australia/NSW');
print '<p>NSW time is ' . date('Y-m-d H:i:s T (I)') . '</p>';
date_default_timezone_set('Australia/North');
print '<p>NT time is ' . date('Y-m-d H:i:s T (I)') . '</p>';
date_default_timezone_set('Australia/South');
print '<p>SA time is ' . date('Y-m-d H:i:s T (I)') . '</p>';
从中我得到这个输出...
NZ time is 2014-10-05 14:04:27 NZDT (1)
NSW time is 2014-10-05 12:04:27 EST (1)
NT time is 2014-10-05 10:34:27 CST (0)
SA time is 2014-10-05 11:34:27 CST (1)
现在,NZ时区缩写是正确的(NZDT),并且所有澳大利亚时间都是正确的,但是两个夏令时处于活动状态的澳大利亚时间(如php date'I'格式字符所指示,如果返回,则返回'1'夏令时到位)仍显示非DST的缩写。
有任何想法吗?
一些东西:
您应该尽可能采用时区名称的规范形式。您提到的区域实际上是链接(又名别名)。有关详细信息,请参阅此图表。具体来说:
NZ => Pacific/Auckland
Australia/NSW => Australia/Sydney
Australia/North => Australia/Darwin
Australia/South => Australia/Adelaide
实际上,澳大利亚有5个主要地区的时区规则不同。您可能希望参考此Wikipedia文章以了解详细信息。
Australia/Darwin
(aka Australia/North
)根本没有遵守夏令时。
实际上,其他两个时区(悉尼和阿德莱德)将在您指定的日期和时间处于夏令时。但是,澳大利亚时区的名称和缩写不一定绝对清楚。例如,以下所有地方都提到了悉尼的夏令时名称:
PHP从IANA时区数据库中提取其时区。时区缩写也来自同一来源。长期以来,该数据集在东部标准时间和东部夏令时均使用“ EST”的缩写。
最近在2014f版本中对此进行了更改。您可以在发行说明中阅读详细信息。现在,它将AEST用于标准时间,将AEDT用于白天。
您可以通过将PHP的timezonedb更新到2014.6或更高版本来获得此更改。您可以在此处或此处找到更新说明。
或者,您可以只更新到最新版本的PHP。根据发布日期,我认为PHP 5.3.29版本应该随timezonedb 2014.6一起提供。使用该版本或更高版本,您应该获得新的缩写。
您也可以致电timezone_version_get()
查看所用的timezonedb版本。接收新的缩写应该是2014.6或更大。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句