2014-12-14 3 views
2

Я хочу рассчитать разницу между двумя днями. Проблема заключается в том, что когда я вычисляю дни, один день (текущий день) отсутствует из расчета.PHP DateTime :: Diff "steals" однажды

Допустим, что дата1 составляет 20-12-2014, а дата2 - 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"); 
+1

'новый DateTime()' установит $ currentDay до текущей даты * и времени *. Вероятно, вы видите ноль, потому что между текущей датой и временем * и датой, с которой вы сравниваете это, на самом деле меньше суток. –

ответ

5

Как уже было сказано @ Matt в комментарии, вы не только сравнения дат, но даты со временем, когда в $currentDay переменной у вас есть время, чтобы установить текущее время и время в $listDay установлено в 00:00:00. Вы можете быстро увидеть, что если вы сбросите эти 2 переменные, например print_r($currentDay); и print_r($listDay);.

решение было бы, чтобы создать $currentDay DateTime объект со временем, установленным в 00:00:00, и это можно легко осуществить с today ключевым словом:

$currentDay = new DateTime('today'); 
$listDay = new DateTime($results['date']); 
$interval = $currentDay->diff($listDay); 
echo $interval->format('%r%a'); 

demo

+0

Спасибо @ Glavić. вы образец кода работает отлично. Спасибо за ваш ответ. – jureispro

1

Вы должны сделать очень уверен, что вы передаете в 2 разные даты, потому что если вы сделаете 2 новые объекты DateTime которые разделены на 1 день, это даст вам разницу в 1 день. Кроме того, вы можете сократить свои последние две строки только один:

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