PHP的timezone_transitions_get()返回的这个奇怪的值是什么?

时间:2013-07-26 03:26:17

标签: php datetime timezone

我在使用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 timezonedb的版本无关。任何人都知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

请查看this documentation以获取timezone_transitions_get的参考。显然,他们缺少以下细节:

[ts]值表示转换的时间戳,自UTC 1970年1月1日午夜以来微秒的数量。它存储为64位有符号整数,-9223372036854775808是可能的最小值。

[time]值是等效于[ts]值的ISO8601字符串。负面年份看起来很有趣,特别是那些有很多数字的数字,但这确实是数学等价物。

将这些视为“时间的开始”。好吧,至少就计算机而言。 : - )

[offset]值是转换的UTC偏移量表示的整秒数。除以3600,您将获得相同的小时数。

[isdst]值是布尔值(1或空白),表示偏移量是否代表夏令时。

[abbr]值是描述时区的简短缩写。 Abbreviations can be ambiguous,因此它只是作为显示值存在并且易于参考。什么都不应该被限制。