我正在尝试检索PHP间隔的天数。当我在http://sandbox.onlinephpfunctions.com/上运行以下代码时:
$duration = new \DateInterval('P1Y');
echo $duration->format('%a');
echo "Done";
我明白了:
(unknown)Done
我做错了什么?
答案 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;
}