Das PHP IntlDateFormatter-Format gibt ein falsches Datum zurück
Frage
Ich erhalte falsche Ergebnisse bei Verwendung von 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
Dies geschieht jedoch nur für Daten zwischen dem 26.03.2012 und dem 28.10.2012 und ohne Stundenangabe (00:00:00).
Ich kann nicht herausfinden, was das Problem ist.
Danke für die Hilfe.
Lösung
http://userguide.icu-project.org/datetime/timezone#TOC-Factory-Methods-and-the-Default-Tim sagt
TimeZone
verwaltet ein statisches Zeitzonenobjekt, das als bekannt ist Standardzeitzone.Dies ist die Zeitzone, die implizit verwendet wird, wenn der Benutzer keine angibt.ICU versucht, dies mit der Zeitzone des Host-Betriebssystems abzugleichen.
Kurz gesagt, wenn Sie das ändern möchten Standardzeitzone von intl bis was übereinstimmt date()
sagt, Sie müssen die Zeitzone auf Ihrem Betriebssystem ändern.Aber Tu das nicht.
Es empfiehlt sich, die Zeitzone im Aufruf an anzugeben IntlDateFormatter::create()
.Wenn Sie die Standardzeitzone verwenden möchten, die PHP anderswo verwendet, können Sie diese mit abrufen date_default_timezone_get()
.
$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE,
date_default_timezone_get()
);