以下のような月末日取得の実装を行なっていた。
const date = new Date();
date.setMonth(date.getMonth() + 1);
date.setDate(0);
date.setHours(23, 59, 59, 999);
console.log(date)setMonth で対象の月 + 1の月をセットし、 setDate(0) で前月の月末日をセット => 対象の月の月末日が求められるというロジックである。
基本的には正常に機能していたのだが、対象の日付が 2024-10-31 の場合に、 2024-11-30 が出力される不具合に遭遇した。
setMonth の使用で、セットした月に存在しない日付だった場合、さらに + 1した月がセットされる。
今回のケースでは11月31日という存在しない日付となるため、自動的に12月に置き換えられていた。
そして、12月の状態で setDate(0) としたため前月の月末日、つまり 2024-11-30 が出力される結果となった。