Формат PHP IntlDateFormatter возвращает неправильную дату

StackOverflow https://stackoverflow.com/questions/9499830

  •  14-11-2019
  •  | 
  •  

Вопрос

Я получаю неверные результаты, используя 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()
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top