Формат PHP IntlDateFormatter возвращает неверную дату - PullRequest
2 голосов
/ 29 февраля 2012

Я получаю неверные результаты, используя 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

Но это происходит только для дат между 2012/26/26 и 2012/10/28 и без часов (00:00:00).

Я не могу выяснить, в чем проблема.

Спасибо за помощь.

1 Ответ

4 голосов
/ 29 февраля 2012

http://userguide.icu -project.org / datetime / timezone # TOC-Factory-Methods-and-the-default-Tim говорит

TimeZone поддерживает статическийобъект часового пояса, известный как часовой пояс по умолчанию .Это часовой пояс, который неявно используется, когда пользователь не указывает его.ICU пытается сопоставить это с часовым поясом операционной системы хоста.

Короче говоря, если вы хотите изменить часовой пояс по умолчанию с intl в соответствии с тем, что говорит date(), вы должныизменить часовой пояс в вашей операционной системе.Но этого не делают .

Желательно, чтобы вы указали часовой пояс в вызове на IntlDateFormatter::create().Если вы хотите использовать часовой пояс по умолчанию, который использует PHP в других местах, его можно получить с помощью date_default_timezone_get().

$dateFormater = \IntlDateFormatter::create(
    'en_EN',
    \IntlDateFormatter::LONG,
    \IntlDateFormatter::NONE,
    date_default_timezone_get()
);
...