我在使用PHP的timezone_transitions_get()
时注意到一些奇怪的东西。返回数组的第一个元素似乎是这个不太可能/不可用的值,无论使用的时区如何:
php -r 'print_r(timezone_transitions_get(new DateTimeZone("GMT")));'
Array
(
[0] => Array
(
[ts] => -9223372036854775808
[time] => -292277022657-01-27T08:29:52+0000
[offset] => 0
[isdst] =>
[abbr] => UTC
)
)
php -r 'print_r(timezone_transitions_get(new DateTimeZone("US/Pacific")));'
Array
(
[0] => Array
(
[ts] => -9223372036854775808
[time] => -292277022657-01-27T08:29:52+0000
[offset] => -25200
[isdst] => 1
[abbr] => PDT
)
...
我已经用PHP 5.3和5.4尝试过了。它似乎与所使用的PECL时区b的版本无关。有人知道为什么会发生这种事吗?
请查看此文档以供timezone_transitions_get
参考。显然,他们遗漏了以下细节:
[ts]
值表示转换的时间戳,表示自1970年1月1日午夜UTC以来微秒的数量。它被存储为一个64位有符号整数,-9223372036854775808
是可能的最小值。
[time]
值是等效于[ts]
值的ISO8601字符串。负年份看起来很有趣,尤其是那些有那么多数字的年份,但这确实是数学上的等价物。
把这些看作是"时间的开始"。至少就计算机而言
[offset]
值是由转换的UTC偏移量表示的整秒数。除以3600,你将得到一个相等的小时数。
[isdst]
值是一个布尔值(1
或空白),指示偏移量是否表示夏令时。
[abbr]
值是描述时区的缩写。缩写词可能不明确,所以它只是作为一个显示值,便于参考。不应该对其进行任何键控。