問題
早速ですが問題です。現在5月31日です。下記テンプレートの出力値(1ヶ月後の日付)はどのようになるでしょうか?
<mt:date date_modify="+1 month" format_ts="Y-m-d" />
正解
2022-07-01
解説
私は6月30日だと考えました。民法第143条にも「ただし、月又は年によって期間を定めた場合において、最後の月に応当する日がないときは、その月の末日に満了する。」という記述があります。しかしそうはなりません。
PowerCMS Xのコードを確認するとdate_modifyモディファイアはPHPのDateTime::modifyで実装されているのですが、PHP: DateTime::modifyにも注意書きがあるように、月の加減算は私たちの感覚とは違った日付が出るので注意が必要です。
恥ずかしながらPHPのドキュメントをよく読んでおらず、一部の月末だけバグを発生させてしまいました。懺悔の意味も込めてこの記事に書き残します。