如何从 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".
您需要 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() 创建的,它将无法工作。
希望对你有帮助。
如果你想了解年份或月份的上下文,请使用它,二月将 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
我正在尝试检索 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".
您需要 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() 创建的,它将无法工作。 希望对你有帮助。
如果你想了解年份或月份的上下文,请使用它,二月将 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