JavaScriptで日付を取得するときに、today = new Date(); みたいな事をする機会はままあります。
この時に、前日やn日後などを取得したいときのやり方です。
具体例
※実行はChromeの検証タブで行ったものです。ブラウザによって動作が異なる可能性があります。
実行行の下にはtoString();で文字列変換したものを記載しました。
// 今の日付情報 d = new Date(); Wed Nov 16 2016 21:47:13 GMT+0900 (JST) // 日付を指定して生成 (年, 月-1, 日) d = new Date(2016, 10, 30); // 2016/11/30になる。 Wed Nov 30 2016 00:00:00 GMT+0900 (JST) // 翌日を指定 d2 = new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1); // new Date(2016, 10, 31); // 31日は存在しないので翌月になる。 Thu Dec 01 2016 00:00:00 GMT+0900 (JST) // 正しく11/1になっている。 // (こんな指定もできる) d.setDate(d.getDate() +1); Fri Dec 01 2016 00:00:00 GMT+0900 (JST) // chromeの検証タブでは数値が表示されるのみです。 // 前日 d = new Date(2016, 0, 0); // 1月0日 0を指定で前日 -1 なら2日前 Thu Dec 31 2015 00:00:00 GMT+0900 (JST) // 2015/12/31になる。 // 閏年 d = new Date(2015, 2, 0); // 3/1の前日 Sat Feb 28 2015 00:00:00 GMT+0900 (JST) // 2015年は閏日が無い d = new Date(2016, 2, 0); // 3/1の前日 Mon Feb 29 2016 00:00:00 GMT+0900 (JST) // 2016年は閏日がある // ある日から10000日後 d = new Date(1995, 8, 24 + 10000); Thu Feb 09 2023 00:00:00 GMT+0900 (JST) // ある日の1000日前 d = new Date(2020, 6, 24 - 1000); Sat Oct 28 2017 00:00:00 GMT+0900 (JST)
こんな感じでマイナスを指定するといい感じに日付を取得してくれます。31日の無い月や閏年もしっかり処理してくれます。
ミスりそうなところ
- 日付を指定する際は、0~11で指定(本当の月-1の値)
- 前日の指定は-1ではなく0
- 時,分,秒など0があるものは-1でひとつ前の時間
ついでに、うるう秒に対応しているか調べましたが、流石に対応していませんでしたw
(対応されていても、それはそれで混乱しそうな気もするけど…
// うるう秒 // 最も最近のうるう秒は2015/7/1/午前9時直前 ( 8:59:60 ) d = new Date(2015, 6, 1, 9, 0, -1); Wed Jul 01 2015 08:59:59 GMT+0900 (JST) d = new Date(2015, 6, 1, 9, 0, 0); Wed Jul 01 2015 09:00:00 GMT+0900 (JST) d = new Date(2015, 6, 1, 9, 0, 1); Wed Jul 01 2015 09:00:01 GMT+0900 (JST)
すごい便利に作られています! ですが、ハマりそうな部分がちょいちょいあるので気をつけたいですね〜