O formato PHP IntlDateFormatter retorna data errada
Pergunta
Estou obtendo resultados incorretos usando 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
Mas isso só acontece para datas entre 26/03/2012 e 28/10/2012 e sem hora (00:00:00).
Não consigo descobrir qual é o problema.
Obrigado pela ajuda.
Solução
http://userguide.icu-project.org/datetime/timezone#TOC-Factory-Methods-and-the-Default-Tim diz
TimeZone
mantém um objeto de fuso horário estático conhecido como fuso horário padrão.Este é o fuso horário usado implicitamente quando o usuário não especifica um.A ICU tenta combinar isso com o fuso horário do sistema operacional host.
Resumindo, se você quiser mudar o fuso horário padrão de intl para corresponder ao que date()
diz, você deve alterar o fuso horário em seu sistema operacional.Mas não faça isso.
É preferível que você especifique o fuso horário na chamada para IntlDateFormatter::create()
.Se você deseja usar o fuso horário padrão que o PHP está usando em outro lugar, isso pode ser recuperado com date_default_timezone_get()
.
$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE,
date_default_timezone_get()
);