PHP DateTime / DateInterval对象差异返回奇怪的结果

时间:2012-07-17 21:59:43

标签: php datetime date

我有以下PHP datetime object给出了奇怪的结果:

<?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来找到这种差异,但愿意接受其他必要的手段。

1 个答案:

答案 0 :(得分:4)

请参阅,$interval是一个对象,而不是一些原始值。在您的示例中,此间隔包含两年,零个月和零天。当您查询其属性时,它不会自动转换为“以月为单位的间隔,以天为单位的间隔”等:它只返回它们的值。这是非常正确的:例如,你应该考虑每月间隔29天吗?

唯一的例外是$days属性(不是$d!),它实际上具有该间隔内天数的计算值。它在documentation

中有很好的描述
  

$ days
  总计开始日期和结束日期之间的天数   DateTime :: diff()计算