PHP 5.3中关于日期差异计算天数的奇怪问题

7

我使用 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; 

以上代码显示$daysBefore变量的值为4。

为什么PHP会在2012年1月27日和2012年4月1日之间显示4天的差异,当这些日期之间有更多的天数时呢?

我做错了什么吗?

4个回答

5

DateInterval::$d 是时间间隔的天数部分,并不是差异的总天数。如果需要获取差异的总天数,应该使用 DateInterval::$days,因此:

$daysBefore = $diff->days;

2
通过 DateTime::diff 方法创建 DateInterval 时,它不仅会填充天数,还会填充小时、分钟、秒、月份甚至年份到 单个字符 属性中。您正在检查单个字符 d 的天数,这将是在计算年份和月份后剩余的天数。
请尝试查看只有在使用 diff 时才真正填充的 days 属性。
此处的行为极不一致。请查看 DateInterval::format 手册页面,了解通过各种方式创建 DateInterval 时会发生什么有趣的事情。

2
< p > d 属性是指“3个月,4天”中的天数。如果您想要得到总共的天数,请使用days属性。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接