3

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

4 回答 4

6

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

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

可以通过 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
于 2011-04-25T08:10:38.867 回答
1

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

输出:timezones.php

源代码:

<?php

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

    echo $zone.'<br/>';

}   

?>

最好的,克里斯蒂安

于 2011-04-25T08:04:31.593 回答
0

正如Pascal MARTIN 指出的那样,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
于 2011-04-25T08:27:11.443 回答
0

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

于 2012-02-18T15:43:07.570 回答