Le format PHP intldateFormatter renvoie la mauvaise date
Question
J'obtiens des résultats incorrects en utilisant 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
Mais cela ne se produit que pour les dates entre 2012/03/26 et 2012/10/28 et sans heure (00:00:00).
Je ne peux pas découvrir quel est le problème.
Merci pour l'aide.
La solution
http://userguide.icu-project.org/datetime/timezone#toc-factory-methods-and-the-default-tim dit
TimeZone
maintient un objet de fuseau horaire statique connu sous le nom de Fuseau horaire par défaut. C'est le fuseau horaire qui est utilisé implicitement lorsque l'utilisateur n'en spécifie pas. Les USI tentent de faire correspondre cela au fuseau horaire du système d'exploitation hôte.
Bref, si vous voulez changer le fuseau horaire par défaut d'Intl pour correspondre à quoi date()
Dit, vous devez modifier le fuseau horaire de votre système d'exploitation. Mais Ne fais pas ça.
Il est préféré que vous spécifiez le fuseau horaire de l'appel à IntlDateFormatter::create()
. Si vous souhaitez utiliser le fuseau horaire par défaut que PHP utilise ailleurs, qui peut être récupéré avec date_default_timezone_get()
.
$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE,
date_default_timezone_get()
);