私の 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)