我已尝试使用以下代码生成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
答案 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)
在我的服务器上测试过。没问题。也许这是与服务器相关的问题?
源代码:
<?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)