奇怪的PHP 5.3问题与日期差异计算天数的差异

时间:2012-01-27 14:23:03

标签: php datetime php-5.3

我遇到一个相当奇怪的问题,使用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天的差异,显然这些日期之间还有更多天。

我做错了吗?

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)

4天,几个月......

使用$diff->days总天数。

http://www.php.net/manual/en/class.dateinterval.php