JavaScriptではよくあるこんな罠があります。
2015/4/1のDateオブジェクトを作ろうとするバグを含むコーディング例
var d = new Date();
d.setFullYear(2015);
d.setMonth(3); // 0オリジンで4月
d.setDate(1);
d // Fri May 01 2015 … 5月になっている
ちょうど投稿日の2015/3/31のような日付で実行すると再現するのですが、
3行目のsetMonth
の所で2015/4/31になり、即時補正されて2015/5/1になります。
特定の日時が欲しい時はコンストラクタを使うか、先にsetDate(1)
としておくのが無難そうです。
JavaScriptに限らずsetMonth
、next month
といった単語が目に入ったら「もし31日に実行したら…」と想像する癖をつけるのが良いと思います。
日付の自動補正関係は時限爆弾になるので気をつけたいですね。
罠についてはこちらも参考になります。
JavaScript の Date は罠が多すぎる - Qiita
コンストラクタに文字列を与える時のブラウザ間の差異はこちらが参考になります。
Dateオブジェクト (日付と時刻) | JavaScript プログラミング解説