ソースレビュー中に驚く記述がありました。
var year = 2017; var month = 2; var day = 22; var d = new Date(year, month-3, day); // 3ヶ月前
いやこれ、月がマイナスになる場合は落ちるんじゃないか、と思いました。
ところが、実際に動かしてみるとこうなります。
ちゃんと今日から3ヶ月前の日付になっていると思います。
Mozillaの開発者向け情報にJavaScriptのDateの仕様か記載されています。
ほかの技術ブログなどでもそうですが、monthには0~11、dayには1~31が指定可能と記載されています。
ブラウザの実装に依存する形ではありますが、主要ブラウザではいずれも正常に動作しています。
以下は実際に動かしてみた各コンストラクタの内容です。思ったよりいろいろと指定できるようです。
コンストラクタ | 引数 | 引数の例 | 出力される内容 | 備考 |
---|---|---|---|---|
new Date() | (引数無し) | (引数無し) | 現在の日付 | |
new Date(long) | MilliSeconds | 946652400000 | 1900/1/1 00:00:00から経過したミリ秒 | |
new Date(int) | year | 2013 | 入力した年数の1月1日(世界標準時) | |
new Date(String) | dateString | 2017/02/22 2017/2/22 2017-02-22 2017/2/22 21:15:9 |
入力した文字を日付にしたもの | スラッシュ(/)区切りなら1桁は0が不要 ハイフン(-)区切りなら必ず2桁必要 Date.parse()で解析できる文字列ならOK |
new Date(int, int) | year, month | 2017, 02 | 入力した年数、月の1日 | mmにはマイナスも指定可能。指定した場合、-1ならyyyy-1の12月 |
new Date(int, int, int) | year, month, day | 2017, 02, 22 | 入力した年数、月、日の00:00:00 | mm、ddにはマイナスも指定可能。mmが-1ならyyyy-1の12月、ddがマイナス-1ならyyyy-1、mm-2の末日 |
new Date(int, int, int, int) | year, month, day, hour | 2017, 02, 22, 21 | 入力した年数、月、日のhh:00:00 | hourにもマイナス指定が可能。hourがマイナスなら↑の年月日の前日23時 |
new Date(int, int, int, int, int) | year, month, day, hour, minute | 2017, 02, 22, 21 | 入力した年数、月、日のhour:00:00 | minuteにもマイナス指定が可能。minuteがマイナスなら↑の年月日の時間から1分引いた時刻 |
new Date(int, int, int, int, int, int) | year, month, day, hour, minute, second | 2017, 02, 22, 21, 36, 29 | 入力した年数、月、日のhour:minute:second | secondにもマイナス指定が可能。secondがマイナスなら↑の年月日の時間から1秒引いた時刻 |