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