2011-01-31 60 views
10

我试图运行此脚本:DateTimeZone错误:未知的或坏的时区

<?php 
$d = new DateTime('now', new DateTimeZone('Asia/Kolkata')); 
$time = $d->format('H:i'); 

echo $time; 
?> 

,但我得到这个错误:

Fatal error: Uncaught exception 'Exception' with message 'DateTimeZone::__construct() [<a href='function.DateTimeZone---construct'>function.DateTimeZone---construct</a>]: Unknown or bad timezone (Asia/Kolkata)

虽然它可以很好地用于Asia/Dacca例如。可能是什么问题以及如何解决它?

+3

`的print_r(DateTimeZone :: listIdentifiers());`它返回`亚洲/加尔各答'? – ajreal 2011-01-31 07:12:44

回答

3

欢迎来到StackOverflow!如果您还没有时间阅读常见问题解答。

我试过你的例子,它适用于PHP 5.3.1和“Olson”时区数据库版本2009.18

你应该做一个phpinfo(),看看你有什么时区的数据库版本,如果它的旧版本更新它。您可以在this list中看到最新版本2011.1拥有亚洲/加尔各答。

1

试试这个为乐趣。

$timezones = array('Europe/London', 'Mars/Phobos', 'Asia/Kolkata'); 

foreach ($timezones as $tz) { 
    try { 
     $mars = new DateTimeZone($tz); 
    } catch(Exception $e) { 
     echo $e->getMessage() . '<br />'; 
    } 
} 
0

PHP时区数据库已在版本5.3中更新。尝试安装并重试

0

当我尝试在CHROOT监狱中运行网络服务器时,我遇到了同样的问题。在这种情况下,chroot dir不能包含Linux时区文件。如果这是你的情况,你可以访问的网络服务器文件简单的复制所有文件到chroot监牢:

为CentOS是

cp -R /usr/share/zoneinfo/ /MY_CHROOT_DIR/usr/share/