我遇到一个相当奇怪的问题,使用PHP 5.3的日期差异函数来计算两个日期之间的天数差异。以下是我的代码:
$currentDate = new DateTime(); // (today's date is 2012-1-27)
$startDate = new DateTime('2012-04-01');
$diff = $startDate->diff($currentDate);
$daysBefore = $diff->d;
echo $daysBefore;
上面的代码显示4作为$ daysBefore变量的值。
为什么PHP在2012年1月27日到2012年4月1日之间显示4天的差异,显然这些日期之间还有更多天。
我做错了吗?
答案 0 :(得分:5)
DateInterval::$d
是间隔的天数部分,不差异的总天数。为此,您需要DateInterval::$days
,所以:
$daysBefore = $diff->days;
答案 1 :(得分:2)
通过DateInterval
方法创建DateTime::diff
时,它不仅会填充单个字符属性中的天数,还会填充小时,分钟,秒,月甚至数年。您正在检查单个字符d
的天数,这将是计算一年和几个月的剩余天数。
尝试查看days
属性,该属性仅在您使用diff
时才会填充。
这里的行为非常不一致。查看DateInterval::format
手册页,了解有关通过各种方式创建DateInterval时会发生什么的有趣信息。
答案 2 :(得分:2)
d
属性是“3个月, 4天”中的天数。如果您想要总天数,请使用days
属性。
答案 3 :(得分:0)