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.

Était-ce utile?

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()
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top