子供がお菓子作りにハマって、最近クッキーやチョコケーキいっぱい食べてる遠藤です(๑´ڡ`๑)
最近まで知らなかったのですが、PHP7.1以下で DateTime で差分を取る時、PHPにバグがあるっぽいです。
// 問題ない
$start = new DateTime('2019-01-01 00:00:00');
$end = new DateTime('2020-01-01 00:00:00');
$interval = $start->diff($end);
echo $interval->format('%y年%mヶ月'); // 結果 1年0ヶ月
// 問題ない
$start = new DateTime('2019-01-01 00:00:00');
$end = new DateTime('2019-02-01 00:00:00');
$interval = $start->diff($end);
echo $interval->format('%y年%mヶ月'); // 結果 1年1ヶ月
// あれれれ?
$start = new DateTime('2019-01-01 00:00:00');
$end = new DateTime('2019-03-01 00:00:00');
$interval = $start->diff($end);
echo $interval->format('%y年%mヶ月'); // 結果 1年1ヶ月
// 問題ない
$start = new DateTime('2019-01-01 00:00:00');
$end = new DateTime('2020-04-01 00:00:00');
$interval = $start->diff($end);
echo $interval->format('%y年%mヶ月'); // 結果 1年3ヶ月
3月のみ、時間計算がうまく動いていないよう?で、時間をプラスすると正しくなります。
// 00:00:00 をやめて 01:00:00 にしてみる
$start = new DateTime('2019-01-01 01:00:00');
$end = new DateTime('2020-03-01 01:00:00');
$interval = $start->diff($end);
echo $interval->format('%y年%mヶ月'); // 結果 1年2ヶ月
なんだか不思議なバグですね。
PHP7.2以上であれば、00:00:00 でも正しく計算されます(`・ω・´)ゞ