Формат PHP IntlDateFormatter возвращает неправильную дату
Вопрос
Я получаю неверные результаты, используя IntlDateFormatter:
$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE
);
$a = date('Y/m/d H:i:s',1332712800); //2012/03/26 00:00:00
$b = $dateFormater->format(1332712800); //March 25, 2012
Но это происходит только для дат между 26.03.2012 и 28.10.2012 и без часа (00:00:00).
Я не могу понять, в чем проблема.
Спасибо за помощь.
Решение
http://userguide.icu-project.org/datetime/timezone#TOC-Factory-Methods-and-the-Default-Tim говорит
TimeZone
поддерживает статический объект часового пояса, известный как часовой пояс по умолчанию.Это часовой пояс, который используется неявно, если пользователь его не указывает.ICU пытается сопоставить это время с часовым поясом операционной системы хоста.
Короче говоря, если вы хотите изменить часовой пояс по умолчанию из международного, чтобы соответствовать чему date()
говорит, что вам необходимо изменить часовой пояс в вашей операционной системе.Но не делай этого.
Желательно указать часовой пояс при вызове IntlDateFormatter::create()
.Если вы хотите использовать часовой пояс по умолчанию, который PHP использует в другом месте, его можно получить с помощью date_default_timezone_get()
.
$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE,
date_default_timezone_get()
);