JavaScriptで日付(主に月)の加算・減算をしたい人必見!!!
やり方をググると、色々なページで解説がありますね。
僕もググりました。殆どがsetMonthを使ってますね!
var date = new Date('2015/1/31');
date.setMonth(date.getMonth()+1);
「「「しかし、、、コレちょっと危険なんです!!」」」
上記のコードを実行して、dateの中身をみてください。
期待した結果:2015/02/28
実際:2015/03/03
おそらくですが、
2月31日(あり得ない) - 2月28日(現実) = 3日
2月28日(現実) + 3日(あまった日数) = 2015/3/3(結果)
このような計算が行われていると思われます。
今回は加算でしたが、減算でも起こり得ます。
なぜこうなったのか。。。ヒントはwikiにありました。
JavaScriptという言葉は狭義にはMozillaが仕様を策定し実装しているスクリプト言語を指す。このスクリプト言語はEcmaインターナショナルでECMAScript (ECMA-262) として標準化されており、多くのWebブラウザー等はこの標準化されたECMAScriptを実装している。(https://ja.wikipedia.org/wiki/JavaScript)
上記の文にあるECMAScriptのリファレンスを読んでみると。。。。。
http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.38
ここにしっかりと書いてあるっぽい。
気をつけて
きっと知らずに使っている方はいっぱいいらっしゃいます。
みなさん気をつけてくだせぇ!!!
ライブラリを使って解決したり、月初でsetMonthやったりと、
対策もたくさんあります!
一番良いのは何かを考えながら実装するのも楽しいですね!