質問

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

ただし、これは 2012/03/26 から 2012/10/28 の間の、時 (00:00:00) のない日付でのみ発生します。

何が問題なのか分かりません。

助けてくれてありがとう。

役に立ちましたか?

解決

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

TimeZone として知られる静的なタイム ゾーン オブジェクトを維持します。 デフォルトのタイムゾーン. 。これは、ユーザーが指定しない場合に暗黙的に使用されるタイム ゾーンです。ICU は、これをホスト OS のタイムゾーンと一致させようとします。

要するに、変更したい場合は、 デフォルトのタイムゾーン intl から何に一致するか date() オペレーティング システムのタイム ゾーンを変更する必要があると言われています。しかし そんなことしないで.

への呼び出しでタイムゾーンを指定することをお勧めします。 IntlDateFormatter::create(). 。PHP が他の場所で使用しているデフォルトのタイムゾーンを使用したい場合は、次のように取得できます。 date_default_timezone_get().

$dateFormater = \IntlDateFormatter::create(
    'en_EN',
    \IntlDateFormatter::LONG,
    \IntlDateFormatter::NONE,
    date_default_timezone_get()
);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top