Date オブジェクトのgetMonth()メソッドにバグがあるようです。d日付がであると仮定すると、次のよう2013-01-31に月を設定しようとしdます:
const d = new Date(); // 2013-01-31
d.setMonth(8);
console.log(d.getMonth());
結果は9です。なんで?Chrome と Firefox の両方でこれをテストしました。
31 日、30 日、29 日の場合、日数の少ない月を日付に設定するとgetMonth間違った値が返されることがわかりました。