Ошибка 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/