【问题标题】: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不计算两个不同年份的日期差?

【问题讨论】:

  • 没有问题,我已将评论转换为仅针对该问题的答案;D

标签: php datetime datediff


【解决方案1】:

因为有 0 天的差异。但是有1年的差异。如果您将%d 更改为%y,您将得到 1。因此相差 1 年、0 个月和 0 天。

您可以改用DateInterval 上的days 属性,例如:

$result = $interval->days;

【讨论】:

  • 谢谢乔恩,但是我该如何返回这些日期之间的天数?
  • @Syxmoke 使用答案底部的代码。
  • 哦,对不起,我没有看到你的答案,我现在测试一下。
【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 2021-10-16
    相关资源
    最近更新 更多