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

时间:2017-02-20 09:33:53

标签: php dateinterval

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

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

我明白了:

(unknown)Done

我做错了什么?

3 个答案:

答案 0 :(得分:4)

'%a'将仅在您采取时差时返回天数,否则将返回未知数 您可以使用'%d'来获取天数,但在新\ DateInterval('P1Y')的情况下也会返回0,因为它不会将年数转换为天数。
获取天数的一种简单方法是在零时创建一个DateTime,为其添加时间间隔,然后得到生成的时间戳:

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

答案 1 :(得分:4)

问题在于:

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

正如manual所说,“DateTime :: diff()或(未知)的总天数,否则为”

您需要DateTime的{​​{1}}方法返回的有效dateInterval对象,以使“a”参数与diff()函数一起使用:

DateInterval::format()

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

答案 2 :(得分:0)

如果您想了解年份或月份的情况,请使用此方法,2月将返回28天,leap年将有其额外的一天

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