为什么 DateTime::d iff 在这些日期之间返回 0 天?

Why does DateTime::diff return 0 days between these dates?

提问人:Pekka 提问时间:2/12/2011 更新时间:2/12/2011 访问量:2086

问:

请考虑以下测试用例:

$start = new DateTime("2011-02-25");
$end = new DateTime("2011-03-25");

$interval = $end->diff($start);


echo "INTERVAL = ".$interval->format("%d");  // Should give me the 
                                             // interval in days, right?
echo "START = ".$start->format("Y-m-d");
echo "END = ".$end->format("Y-m-d");

结果是:

INTERVAL = 0  <---------- WTF????
START = 2011-02-25
END = 2011-03-25

diff()似乎声称 2011 年 2 月 25 日至 2011 年 3 月 25 日之间的时间是 0 天!

我一定忽略了什么。但是呢?

PHP 日期时间

评论

0赞 Pekka 2/12/2011
我也试着扭转了顺序:结果是一样的。$interval = $start->diff($end);
2赞 deceze 2/12/2011
我很惊讶对你这么说,但请参阅手册中的示例#3:php.net/manual/en/dateinterval.format.php:)
0赞 Pekka 2/12/2011
@deceze是的,我现在明白了:)虽然老实说,我仍然难以理解应该做什么。无论如何,它有效!(现在我明白了:这是日历日的差异。咄。d
0赞 deceze 2/12/2011
'%m month, %d days'1 month, 0 days
1赞 Pekka 2/12/2011
@deceze是的,谢谢!我今天很慢。

答:

9赞 Foo Bah 2/12/2011 #1

您需要使用格式代码。 是差异中的天数,而不是净天数。在 DateInterval 对象中,是相应的字段。在您的示例中,您将看到'a'ddaysm = 1

评论

0赞 Pekka 2/12/2011
哎呀。我不明白。谢谢!(5分钟内即可接受)
0赞 vicenteherrera 9/1/2015
看了这个问题一个多小时......感谢您的解决方案!