PHP DateTime :: Diff“窃取”一天

时间:2014-12-14 01:41:03

标签: php datetime

我想计算两天之间的日期差异。问题是,当我计算天数时,计算中缺少一天(当天)。

让我们说date1是20-12-2014而date2是21-12-2014。 使用这两个日期的DateTime :: Diff的结果为0(我希望为1,而不是零)

我错过了什么不好或DateTime :: Diff计算日期差异,就像我上面解释的那样?

以下是我正在使用的代码(我希望以天显示日期差异):

      $currentDay = new DateTime();
        $listDay = new DateTime($results["date"]);//from mysql database (output is like 21-12-2014
        $interval = $currentDay->diff($listDay);
        $daysLeft=(int)$interval->format("%r%a");

3 个答案:

答案 0 :(得分:6)

就像@Matt在评论中已经说过的那样,您不仅要比较日期,还要比较日期和时间,$currentDay变量中的时间设置为当前时间,$listDay中的时间设置为00:00:00print_r($currentDay);。如果您转储这两个变量,您可以快速查看,例如print_r($listDay);$currentDay

解决方案是创建00:00:00 DateTime对象,时间设置为today,这可以通过$currentDay = new DateTime('today'); $listDay = new DateTime($results['date']); $interval = $currentDay->diff($listDay); echo $interval->format('%r%a'); 关键字轻松完成:

{{1}}

demo

答案 1 :(得分:2)

你应该确定你在2个不同的日期通过,因为如果你制作2个相隔1天的新DateTime对象,它会给你1天的差异。此外,您可以将最后两行缩短为一行:

$daysLeft = $currentDay->diff($listDay)->days;

答案 2 :(得分:1)

如果要比较两个DateTime对象而不考虑时间。您可以使用下面的代码。

$diff = $currentDay->setTime(0,0)->diff($listDay->setTime(0,0))->days;