【问题标题】:Date difference not calculating correctly in php日期差异在php中没有正确计算
【发布时间】:2016-09-08 11:37:27
【问题描述】:

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

<?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?

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

问候

马特

【问题讨论】:

  • 给我们你的两个日期!

标签: php wordpress date difference


【解决方案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');

【讨论】:

  • 感谢@alok Patel
猜你喜欢
  • 2022-08-14
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多