我正在尝试检索 PHP 间隔的天数。当我在http://sandbox.onlinephpfunctions.com/上运行以下代码时:
$duration = new \DateInterval('P1Y');
echo $duration->format('%a');
echo "Done";
Run Code Online (Sandbox Code Playgroud)
我得到:
(unknown)Done
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
问题就在这里:
$duration->format('%a');
Run Code Online (Sandbox Code Playgroud)
正如手册所述,“DateTime::diff() 或(未知)其他结果的总天数”。
DateTime您需要的方法返回一个有效的 dateInterval 对象,diff()以使“a”参数与DateInterval::format()函数一起使用:
$now = new DateTime(date('Y-m-d H:i:s'));
$duration = (new DateTime("+1 year"))->diff($now);
echo $duration->format('%a');
Run Code Online (Sandbox Code Playgroud)
看起来如果 DateInterval 对象不是由 DateTime::diff() 创建的,它将不起作用。希望能帮助到你。
小智 6
'%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";
Run Code Online (Sandbox Code Playgroud)