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

如何从PHP日期间隔中检索天数?,php,dateinterval,Php,Dateinterval,我试图检索PHP间隔的天数。当我在上运行以下代码时: 我得到: (unknown)Done 我做错了什么 只有当您计算时差时,'%a'才会返回天数,否则它将返回unknown。 您可以使用“%d”获取天数,但如果是new\DateInterval“P1Y”,它也将返回0,因为它不会将年转换为天。 获取天数的一种简单方法是在零时间创建DateTime,将间隔添加到其中,然后获取结果时间戳: <?php $duration = new \DateInterval('P1Y'); $inter

我试图检索PHP间隔的天数。当我在上运行以下代码时:

我得到:

(unknown)Done

我做错了什么

只有当您计算时差时,'%a'才会返回天数,否则它将返回unknown。 您可以使用“%d”获取天数,但如果是new\DateInterval“P1Y”,它也将返回0,因为它不会将年转换为天。 获取天数的一种简单方法是在零时间创建DateTime,将间隔添加到其中,然后获取结果时间戳:

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

“%a”将仅在计算时差时返回天数,否则将返回未知。 您可以使用“%d”获取天数,但如果是new\DateInterval“P1Y”,它也将返回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');
正如上面所说,DateTime::diff或unknown导致的总天数

需要DateTime的diff方法返回有效的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创建的,它将无法工作。 希望有帮助。

问题在于:

$duration->format('%a');
正如上面所说,DateTime::diff或unknown导致的总天数

需要DateTime的diff方法返回有效的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创建的,它将无法工作。
希望能有所帮助。

如果你想了解年份或月份的上下文,请使用此选项,二月将返回28天,闰年将有额外的一天

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

如果您想了解年份或月份的上下文,请使用此选项,二月将返回28天,闰年将有额外的一天

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

每年没有固定的天数。From:由于DateTime::diff或unknown或其他原因导致的总天数。实际上,您不需要经过DateInterval就知道一年由365天组成。除非不是这样,否则你首先需要一个具体的日期时间来判断你是否在谈论闰年。Soooo…首先不太确定这在哪里实际适用。每年没有固定的天数。From:DateTime导致的总天数::diff或unknown其他实际上,你不需要经过日期间隔就知道一年由365天组成。除非不是这样,否则你首先需要一个具体的日期时间来判断你是否在谈论闰年。Soooo…不太确定这一点在哪里实际适用。这一点回答了这个问题-以另一种方式-,但是您没有真正指出DateInterval->format不起作用的原因…正如建议的那样,'%a'在对DateTime::diff的结果调用时只返回天数。这一个以另一种方式回答了问题-,但是您并没有真正指出为什么DateInterval->format不起作用……正如所建议的那样,'%a'在对DateTime::diff的结果调用时只返回天数。