在PHP中没有正确计算日期差异

时间:2016-09-08 11:37:27

标签: php wordpress date difference

我使用以下代码来获取两个日期之间的差异。我遇到的问题是返回正确的剩余天数。

<?php 
$nextservicedate = FrmProDisplaysController::get_shortcode( array( 'id' => 3451 ) );
$currentdate = date("d/m/Y");
$daysremaining = $nextservicedate - $currentdate;
echo $nextservicedate. " | ";
    if ( strpos($nextservicedate, 'None registered') !== false )

    {
        echo "None Registered";
    }
    elseif ($daysremaining < "0")
    {
        $negativedays = str_replace('-', ' ', $daysremaining);
        echo $negativedays. " days overdue";
    }
    elseif ($daysremaining <= "30")
    {
        echo $daysremaining. " days (upcoming service)";
    }
    else
    {
        echo $daysremaining. " days";
    }
?>

条目

FrmProDisplaysController::get_shortcode( array( 'id' => 3451 ) )

从wordpress表单插件(FormidablePro)返回日期为30/10/2016。

代码正在返回,剩下23天,我相信这个问题将持续到本月底。

我知道我错过了一些东西,并认为它可能与解决剩下的部分代码有关。

任何人都可以看到任何明显的错误吗?我是否需要像使用$ currentdate一样声明$ nextservicedate?

任何帮助都会得到很大的回复!

此致

马特

1 个答案:

答案 0 :(得分:1)

PHP的date()返回日期字符串,该字符串不能用于在日期执行算术运算。

您需要做的是使用createFromFormat()从String创建服务日期的DateTime对象,并创建当前的DateTime()对象。

然后使用DateTime对象的diff()函数来查找两天之间的差异。

所以你的代码看起来像这样,

$nextservicedate=DateTime::createFromFormat("d/m/Y",$nextservicedate);
$todaydate=new DateTime();
$difference=$nextservicedate->diff($todaydate);

为了获得天数的差异,

echo $difference->format('%R%a days');