【PHP7.1以下】DateTimeで3月を正しく計算できないバグがある?

子供がお菓子作りにハマって、最近クッキーやチョコケーキいっぱい食べてる遠藤です(๑´ڡ`๑)

最近まで知らなかったのですが、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 でも正しく計算されます(`・ω・´)ゞ