PHP生成的时区的不完整列表



我尝试使用以下代码生成http://php.net/manual/en/timezones.php中指定的完整时区集(UTC除外):

$zones = timezone_identifiers_list();
print_r($zones);

但这个列表似乎跳过了50个地区,例如:太平洋/萨摩亚(与http://php.net/manual/en/timezones.php相比)

我们做错了什么?

phpinfo()显示:

PHP Version 5.3.4
Apache Version  Apache/2.2.3 (CentOS) 
$ uname -r
2.6.18-028stab070.14

编辑# 2

date
date/time support   enabled
"Olson" Timezone Database Version   0.system
Timezone Database   internal
Default timezone    UTC 

您的时区数据库可能不是最新的。

尝试按照支持时区列表页面底部的链接:

最新版本的时区数据库可以通过PECL的»安装timezonedb .



编辑注释后:更新您的时区数据库,因为您是在Linux系统上,您可以使用pecl命令(我刚刚在我的Ubuntu机器上尝试过):

pecl upgrade timezonedb

这将下载新版本并编译它。

然后,如果您启用新的timezonedb扩展,您的PHP应该使用一个最新的数据库:

php -dextension=timezonedb.so -i | grep Timezone
"Olson" Timezone Database Version => 2011.5
Timezone Database => external
Alternative Timezone Database => enabled
Timezone Database Version => 2011.5

如果我试着不启用这个新的扩展,我得到了和你之前一样的东西:

php -i | grep Timezone
"Olson" Timezone Database Version => 0.system
Timezone Database => internal

在我的服务器上进行了测试。完全没问题。也许这是服务器相关的问题?

输出:timezones.php

源代码:

<?php
foreach(DateTimeZone::listIdentifiers() as $zone) {
    echo $zone.'<br/>';
}   
?>

最好的,基督教

正如Pascal MARTIN指出的,PHP时区数据库是一个PECL包。因为您使用的是Linux主机,所以应该没有任何问题:

pecl install timezonedb

…或:

pecl upgrade timezonedb
<标题>更新:

我找到了CentOS特定说明的链接:

  • http://www.electrictoolbox.com/correct-php-timezone/

你也可以搜索:

C:>pecl search timezonedb
Retrieving data...0%
MATCHED PACKAGES, CHANNEL PECL.PHP.NET:
=======================================
PACKAGE    STABLE/(LATEST) LOCAL
timezonedb 2011.5 (stable)       Timezone Database to be used with PHP's date and time functions

尝试调用timezone_identifiers_list(DateTimeZone::ALL_WITH_BC)。这对我很有效。(找到这个解决方案从这个帖子:https://stackoverflow.com/a/5873059/323330)

相关内容

  • 没有找到相关文章

最新更新