为什么两个DateTime对象之间的差异不起作用?

3

我的“日期时间差异代码”有问题:

$timeStart = new DateTime('2015-11-28');
$timeEnd = new DateTime('2016-11-28');
$interval = $timeEnd->diff($timeStart);
$result = $interval->format('%d');

echo $result." day(s)";

当我可视化$result时,PHP显示为0。但在这两个日期之间的天数比0天更多...

PHP无法计算不在同一年的两个日期之间的差异吗?


没问题,我把这个评论转成了一个回答,并且针对那个问题进行了回答;D - Jonnix
2个回答

3

因为没有天数差异,但有一年的差异。如果将%d更改为%y,则会得到1。因此,相差1年,0个月和0天。

你可以使用DateIntervaldays属性来代替,如下所示:

$result = $interval->days;


谢谢Jon,但是我该如何返回这些日期之间的天数? - Syxmoke
@Syxmoke 使用答案底部的代码。 - Jonnix
哦,抱歉,我没有看到你的回答,我现在会测试它。 - Syxmoke

1

好的,我知道答案已经给出了。但以下是一些解释。

实际上,当你有一个固定的时间量(以年、月、日、小时为单位)时,DateInterval::format() 是有意义的,就像这样:

$interval = new DateInterval('P2Y4DT6H8M');
echo $interval->format('%d days');

那不是你的情况!
这里没有相对时间(2016-11-28 相对于 2015-11-28),在这种情况下,你想知道自 2015-11-28 以来过去了多少天。
这就是为什么 DateInterval::days(DateTime::diff() 返回一个 DateInterval 对象)有意义的原因:

$start = new DateTime('2015-11-28');
$end   = new DateTime('2016-12-28');

var_dump($end->diff($start)->days);

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