1

私は奇妙な結果を与える次のPHP datetime オブジェクトを持っています:

<?php
$date = new DateTime("2013-01-01");
$date2 = new DateTime("2011-01-01");

$interval = $date2->diff($date);
echo $interval->m;
?>
  • 月 (m) を使用すると、0 が返されます。不正解です。
  • 間隔を年 (y) に切り替えると、正しい 2 が返されます。
  • 日 (d) に切り替えると、正しくない 0 が返されます。
  • 「日」を使用して日に切り替えると、正しい731が返されます

特定の間隔が機能し、他の間隔が機能しない理由がわかりません。何かアイデアはありますか、それとも期待されていますか? 可能であれば、引き続き DateTime を使用してこの違いを見つけたいと思いますが、他の必要な手段も利用できます。

4

1 に答える 1

4

参照してください、$intervalはオブジェクトであり、プリミティブ値ではありません。あなたの例では、この間隔2 年、0 か月、0 日で構成されています。プロパティをクエリするときに、「月の間隔、日間隔」などに自動的に変換されることはありません。値を返すだけです。その通りです。たとえば、1 か月あたり 29 日間隔を考慮する必要がありますか?

唯一の例外は$daysプロパティ ( $d! ではありません) で、実際にはその間隔で計算された日数の値を持ちます。そして、それはドキュメントで非常によく説明されています:

$days DateTime::diff() 計算の開始日と終了日の間の
合計日数

于 2012-07-17T22:05:41.040 に答える