如何从 PHP 日期间隔中检索天数?

How to retrieve the number of days from a PHP date interval?

我正在尝试检索 PHP 间隔的天数。当我 运行 下面一段代码在 http://sandbox.onlinephpfunctions.com/:

$duration = new \DateInterval('P1Y');
echo $duration->format('%a');
echo "Done";

我得到:

(unknown)Done

我做错了什么?

'%a' 将 return 天数只有当你取时差时才会 return 否则它会 return 未知。
您可以使用 '%d' 来获取天数,但在 new \DateInterval('P1Y') 的情况下它也会 return 0 因为它不会将年数转换为天数。
获取天数的一种简单方法是在零时间创建一个 DateTime,向其添加间隔,然后获取结果时间戳:

<?php
$duration = new \DateInterval('P1Y');
$intervalInSeconds = (new DateTime())->setTimeStamp(0)->add($duration)->getTimeStamp();
$intervalInDays = $intervalInSeconds/86400; 
echo $intervalInDays;
echo " Done";

问题出在这里:

$duration->format('%a');

manual所说,"Total number of days as a result of a DateTime::diff() or (unknown) otherwise".

您需要 DateTimediff() 方法返回一个有效的 dateInterval 对象才能使 "a" 参数与 DateInterval::format() 函数一起使用:

$now = new DateTime(date('Y-m-d H:i:s'));
$duration = (new DateTime("+1 year"))->diff($now);
echo $duration->format('%a');

看起来如果 DateInterval 对象不是由 DateTime::diff() 创建的,它将无法工作。 希望对你有帮助。

如果你想了解年份或月份的上下文,请使用它,二月将 return 28 天,闰年将有额外的一天

function interval2days($day, $interval) {
    $date = clone $day;
    $start = $date->getTimeStamp();
    $end = $date->add($interval)->getTimeStamp();
    return ($end-$start)/86400;
}

您必须使用真实日期创建间隔:

<?php
$interval = date_diff(new DateTime, new DateTime('+1 year'));
echo $interval->format('%a'), PHP_EOL; // 365