PHP生成的时区列表不完整

时间:2011-04-25 07:54:35

标签: php timezone region

我已尝试使用以下代码生成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 

4 个答案:

答案 0 :(得分:6)

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

请尝试点击List of Supported Timezones页面底部的链接:

  

时区的最新版本   数据库可以通过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

答案 1 :(得分:1)

在我的服务器上测试过。没问题。也许这是与服务器相关的问题?

输出:timezones.php

源代码:

<?php

foreach(DateTimeZone::listIdentifiers() as $zone) {

    echo $zone.'<br/>';

}   

?>

最佳, 基督教

答案 2 :(得分:0)

作为Pascal MARTIN points out,PHP时区数据库是PECL包。由于您使用的是Linux主机,因此不应该有任何问题:

pecl install timezonedb

......或:

pecl upgrade timezonedb

更新

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

您也可以进行搜索:

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

答案 3 :(得分:0)

尝试调用timezone_identifiers_list(DateTimeZone :: ALL_WITH_BC)。这对我有用。 (从这篇文章中找到了这个解决方案:https://stackoverflow.com/a/5873059/323330