我使用以下代码来获取两个日期之间的差异。我遇到的问题是返回正确的剩余天数。
<?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?
任何帮助都会得到很大的回复!
此致
马特
答案 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');