情報システム科 ブログ

JavaScriptのDateオブジェクトっていつからこうなった??

2017.10.18

JavaScriptの授業において、ちょっと衝撃だったことを書いておきます。

ウェブページの授業の一環で、月別カレンダーを自動生成するプログラミングに取り組んでいたときです。

関数に、年、月、日の3つのパラメータを渡して、その渡された情報を元に、一か月単位のカレンダーページを自動生成してました。

当然、「次の月」というボタンをクリックしたら、1ずつ月を加算していき、12月のときに、月を加算したら、月を1月に戻して年を1加算するという至極当然の処理を考えておりました。

1加算したら13月になるような状況です。

なぜか、1加算したら、勝手に年が1加算されて月が1月に戻るんです!

おかしい・・・減算処理も同様に確認したところ・・・

1減算したら0月になるような状況です。

なぜか、1減算したら、勝手に年が1減算されて月が12月に戻るんです!

JSのDateオブジェクトは、月の数値をくみ取って勝手に年への操作をしてくれるようになっている!!!

証拠として、加算処理だけのHTML・JSを載せておきます。

上記の状況で、H1要素をクリックして月を1加算すると・・・・以下のように変化します!

Dateオブジェクトっていつの間にかそうなったのか。便利にはなったのですが、同時に処理を覚えていく過程を考えると複雑な気分です。

↓補足:Dateオブジェクトにあり得ない数値等が入ったときに自動的に内容修正するという動きが働くようです。

Date - JavaScript  MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date

(month 値に 13 を与えたり、minute 値に 70 を与える)、調整された値になります。つまり、new Date(2013, 13, 1) は、new Date(2014, 1, 1) と等しくなるように調整され…

いつの間にか、仕様でそうなっていたんですね。

↑