【问题标题】:Why the difference between two DateTime objects does not work?为什么两个 DateTime 对象之间的差异不起作用?
【发布时间】:2015-11-27 17:37:48
【问题描述】:
我的“日期时间差代码”有问题:
$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不计算两个不同年份的日期差?
【问题讨论】:
标签:
php
datetime
datediff
【解决方案1】:
因为有 0 天的差异。但是有1年的差异。如果您将%d 更改为%y,您将得到 1。因此相差 1 年、0 个月和 0 天。
您可以改用DateInterval 上的days 属性,例如:
$result = $interval->days;
【解决方案2】:
好的,我知道答案已经给出。但下面只是一点解释。
事实上,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);