Вычитайте даты, чтобы получить количество дней

Я пытаюсь написать php-код, который сможет вычесть две даты и получить количество дней между двумя датами. Код, который я придумал, приведен ниже

<?php $c_date = date("Ymd"); //Subtracting two dates. $date1 = new DateTime($d_date); //$d_date gets its value from database which i havent shown here $date2 = new DateTime($c_date); $interval = $date1->diff($date2); echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; ?> 

Теперь приведенный выше код работает, но я не могу использовать его в соответствии с моими потребностями. Мне нужно выяснить, не указана ли дата доставки ($ d_date) в течение 5 дней с текущей даты и возвращаемого значения 1, если это так.

Так что если $c_date = "2013-09-24" и $d_date = "2013-09-30" то я буду возвращаться 1. Но проблема в том, что дата доставки – «2013-09-19» дата доставки имеет давнее прошлое, и я должен возвращать 0, но с текущим кодом разница в день будет равна 5, и поэтому я вернусь 1, что неверно.

Есть идеи о том, как преодолеть это?

Попробуй это:

 $interval = $date2->diff($date1); $returnValue = $interval->d <= 5 && !$interval->invert; 

$returnValue будет true или false (тип boolean).

РЕДАКТИРОВАТЬ:
Если быть точным – чтобы оценить его до 1 или 0 вы можете сделать

 $returnValue = (int) ($interval->d <= 5 && !$interval->invert); 

РЕДАКТИРОВАТЬ № 2:
$interval->invert – свойство, сообщающее вам, если разница между $date2 и $date1 отрицательна (1) или положительна (0). Это запутанно – вычисление в методе diff всегда является вторым объектом (аргумент метода) минус первый объект (метод callle), поэтому, если предположительно

 $date1 > $date2 

истинно тогда

 $date1->diff($date2) 

является отрицательным (в ярлыке).

Вы можете сравнить как объекты datetime, так и проверить, превышает ли дата доставки текущую дату и соответственно.

Как функция:

 function check_date($d_date, $c_date) { if($d_date > $c_date) { $date1 = new DateTime($d_date); //$d_date gets its value from database which i havent shown here $date2 = new DateTime($c_date); $interval = $date1->diff($date2); return "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days "; } else { return false; } } 

Прецедент

 var_dump( check_date('2013-09-30', '2013-09-24') ); var_dump( check_date('2013-09-19', '2013-09-24') ); 

Вывод:

 string(37) "difference 0 years, 0 months, 6 days " bool(false) 

Демо!

Я думаю, вы хотите, чтобы прошло несколько дней. если это так:

 $interval = $date1->diff($date2)->days; 

Итак, вот требуемый код, как предложил Maximus2012, используя оператор if для сравнения дат, сначала выполнил работу. Итак, вот код

 $date1 = new DateTime($ddate[$counter]); $date2 = new DateTime($c_date); if($date2>$date1) { $stat = 0; } $interval = $date1->diff($date2); $d_diff = $interval->d; if($d_diff>5) { $stat = 0; } 

Попробуйте следующее: D

 function dateInterval($current, $delivery, $days){ $unixCurrent = strtotime($current); $unixDelivery = strtotime($delivery); if ($unixCurrent === false || $unixDelivery === false){ return -2; } if ($unixCurrent > $unixDelivery){ return -1; } else if ($unixCurrent+($days*86400) > $unixDelivery){ return 1; } else { return 0; } }