Pregunta

Obtengo resultados incorrectos al usar 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

Pero esto solo ocurre para fechas entre el 26/03/2012 y el 28/10/2012 y sin hora (00:00:00).

No puedo descubrir cuál es el problema.

Gracias por la ayuda.

¿Fue útil?

Solución

http://userguide.icu-project.org/datetime/timezone#TOC-Factory-Methods-and-the-Default-Tim dice

TimeZone mantiene un objeto de zona horaria estático conocido como zona horaria predeterminada.Esta es la zona horaria que se utiliza implícitamente cuando el usuario no especifica ninguna.ICU intenta hacer coincidir esto con la zona horaria del sistema operativo host.

En resumen, si quieres cambiar el zona horaria predeterminada desde intl para que coincida con lo que date() dice, debes cambiar la zona horaria en tu sistema operativo.Pero no hagas eso.

Es preferible que especifique la zona horaria en la llamada a IntlDateFormatter::create().Si desea utilizar la zona horaria predeterminada que PHP utiliza en otros lugares, puede recuperarla con date_default_timezone_get().

$dateFormater = \IntlDateFormatter::create(
    'en_EN',
    \IntlDateFormatter::LONG,
    \IntlDateFormatter::NONE,
    date_default_timezone_get()
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top