JavaScriptのDateオブジェクトについて

ハマった・・・、がっつりハマった・・・。

DateオブジェクトのgetMonth()という月をとるメソッドがあるんですが、0~11の値が返ってくるんです。 0が1月で、11が12月。見事計算を間違えまして、(getMonth()+1) を先に変数に代入して、そこから1ヶ月計算する式をつくったのです。それがバグでした。11月から12月にかかるとき、11+1=12 にならないので、何でかなーと思っていたら、11までだったので、0に戻ってしまうんですね。なので、変数に代入せず、出力の際に直接、(getMonth()+1) を使えば良かったんです。

間違ったコード

var date = new Date( today.getFullYear(), (today.getMonth() + 1), (today.getDate() + arg) );
return date.getFullYear() + '.' + date.getMonth() + '.' + date.getDate();

修正後

var date = new Date( today.getFullYear(), today.getMonth(), (today.getDate() + arg) );
return date.getFullYear() + '.' + (date.getMonth() + 1) + '.' + date.getDate();

んー、なかなかどうしてミスってしまった・・・。 うっかりさんなんだぜ!