我想计算两天之间的日期差异。问题是,当我计算天数时,计算中缺少一天(当天)。
让我们说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");
答案 0 :(得分:6)
就像@Matt在评论中已经说过的那样,您不仅要比较日期,还要比较日期和时间,$currentDay
变量中的时间设置为当前时间,$listDay
中的时间设置为00:00:00
到print_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}}
答案 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;