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



我在使用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]值是描述时区的缩写。缩写词可能不明确,所以它只是作为一个显示值,便于参考。不应该对其进行任何键控。

相关内容

  • 没有找到相关文章

最新更新