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.

Foi útil?

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()
);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top