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