【PHP】月の加減算には要注意
例えば一月後の年月が欲しい場合、下記のコードを書くと、実行日によって正しい結果が得られません。
echo (new DateTime())->modify('+1 month')->format('Y-m');
// 2023-05-30 に実行した場合は 2023-06
// 2023-05-31 に実行した場合は 2023-07
月の日付が足りないと、翌月にオーバーフローします。
2023-05-31
の月に 1 を加算すると 2023-06-31
ですが、6 月は 30 日までのため 2023-07-01
となります。
echo (new DateTime('2023-05-30'))->modify('+1 month')->format('Y-m-d'); // 2023-06-30
echo (new DateTime('2023-05-31'))->modify('+1 month')->format('Y-m-d'); // 2023-07-01
正しい例
初日に修正して月を加算すると期待した値が得られます。
echo (new DateTime('2023-05-31'))->modify('first day of +1 month')->format('Y-m-d'); // 2023-06-01
echo (new DateTime('2023-05-31'))->modify('first day of next month')->format('Y-m-d'); // 2023-06-01
modify()
に指定している文字列については、下記の PHP ドキュメントに記載されています。