Javascript の日付オブジェクトは常に 1 日ずれていますか? 質問する

Javascript の日付オブジェクトは常に 1 日ずれていますか? 質問する

私の Java Script アプリでは、日付が次のような形式で保存されています。

2011-09-24

ここで、上記の値を使用して新しい Date オブジェクトを作成しようとすると (異なる形式で日付を取得できるようにするため)、日付は常に 1 日ずれて返されます。以下を参照してください。

var date = new Date("2011-09-24");
console.log(date);

ログ:

Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)

ベストアンサー1

文字列を変換するJS DATEオブジェクトでは、いくつかの奇妙なことが起こります。たとえば、次の日付を考えてみましょう。

注:次の例は、タイムゾーンと現在の時刻に応じて、1 日ずれる場合とずれない場合あります

new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.

ただし、文字列の形式を月-日-年に並べ替えると...

new Date("09-24-2011");
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

もう一つの奇妙なもの

new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.

new Date("2011/09/24"); // change from "-" to "/".
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

新しい日付を作成するときに、日付「2011-09-24」のハイフンを簡単に変更できます。

new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

「2011-09-24T00:00:00」のような日付文字列があったらどうなるでしょうか?

new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.

では、前と同じようにハイフンをスラッシュに変更すると、何が起こるでしょうか?

new Date("2011/09/24T00:00:00");
// => Invalid Date.

通常、日付形式2011-09-24T00:00:00を管理する必要があるので、これを実行します。

new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.

アップデート

Dateコンストラクタに別の引数を与えると、以下に説明する他の便利な出力が得られます。

注:引数は、数値型または文字列型にすることができます。混合値の例を示します。

指定された年の最初の月と日を取得します

new Date(2011, 0); // Normal behavior as months in this case are zero based.
// => Sat Jan 01 2011 00:00:00 GMT-0700 (MST)

年の最後の月と日を取得します

new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
// => Sat Dec 31 2011 00:00:00 GMT-0700 (MST)

数値、文字列引数の例。月は 0 から始まるため、月は 3 月であることに注意してください。

new Date(2011, "02"); 
// => Tue Mar 01 2011 00:00:00 GMT-0700 (MST)

同じことをしても、1 日が 0 であれば、結果は異なります。

new Date(2011, "02", 0); // Again the zero roles back from March to the last day of February.
// => Mon Feb 28 2011 00:00:00 GMT-0700 (MST)

年と月の引数にゼロの日を加えると、前月の最終日になります。負の数を続けると、さらに1日ロールバックすることができます。

new Date(2011, "02", -1);
// => Sun Feb 27 2011 00:00:00 GMT-0700 (MST)

おすすめ記事