Ошибка DateTimeZone: неизвестный или плохой часовой пояс

Я пытаюсь запустить этот script:

<?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, например. Что может быть проблемой и как ее исправить?

Ответ 1

И добро пожаловать в StackOverflow! Если вы еще не прочитали часто задаваемые вопросы.

Я попробовал ваш пример, и это сработало для меня с PHP 5.3.1 и версией базы данных Timezone "Olson" 2009.18.

Вы должны сделать phpinfo() и посмотреть, какая у вас версия базы данных часового пояса, и если она устарела, обновите ее. Вы можете увидеть в этот список, что в последней версии 2011.1 есть Азия/Калькутта.

Ответ 2

Попробуйте это для удовольствия.

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

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

Ответ 3

База данных часовых поясов PHP обновлена ​​в версии 5.3. Попробуйте установить это и повторите попытку

Ответ 4

У меня такая же проблема при попытке запустить веб-сервер в тюрьме CHROOT. В этом случае chrooted dir не может содержать файлы часовых поясов Linux. Если это ваш случай и у вас есть доступ к файлам веб-сервера, просто скопируйте все файлы в chroot jail:

Для CentOS это

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