Как подсчитать дни между двумя датами в PHP?

Если у меня есть пара строк $ startDate и $ endDate, которые установлены (например) «2011/07/01» и «2011/07/17» (что означает 1 июля 2011 года и 17 июля 2011 года). Как я могу считать дни от даты начала до конца? В приведенном примере это будет 17 дней.

Solutions Collecting From Web of "Как подсчитать дни между двумя датами в PHP?"

Вот грубый способ сделать это

$startTimeStamp = strtotime("2011/07/01"); $endTimeStamp = strtotime("2011/07/17"); $timeDiff = abs($endTimeStamp - $startTimeStamp); $numberDays = $timeDiff/86400; // 86400 seconds in one day // and you might want to convert to integer $numberDays = intval($numberDays); 

Используйте DateTime::diff (aka date_diff ):

 $datetime1 = new DateTime('2009-10-11'); $datetime2 = new DateTime('2009-10-13'); $interval = $datetime1->diff($datetime2); 

Или:

 $datetime1 = date_create('2009-10-11'); $datetime2 = date_create('2009-10-13'); $interval = date_diff($datetime1, $datetime2); 

Затем вы можете получить интервал как целое число, вызывая $interval->days .

Для этого PHP имеет функцию date_diff ().

Если ваш DateTime имеет также час: минуты: секунды, и вы все еще хотите иметь количество дней.

  /** * Returns the total number of days between to DateTimes, * if it is within the same year * @param $start * @param $end */ public function dateTimesToDays($start,$end){ return intval($end->format('z')) - intval($start->format('z')) + 1; } 

https://github.com/dukeatcoding/timespan-converter

 <?php $datetime1 = new DateTime('2009-10-11'); $datetime2 = new DateTime('2009-10-13'); $interval = $datetime1->diff($datetime2); echo $interval->format('%R%a days'); ?> 

Источник: http://www.php.net/manual/en/datetime.diff.php

Ни один из решений не работал для меня. Для тех, кто все еще находится на PHP 5.2 (DateTime :: diff введен в 5.3), это решение работает:

 function howDays($from, $to) { $first_date = strtotime($from); $second_date = strtotime($to); $offset = $second_date-$first_date; return floor($offset/60/60/24); } 

Если вы хотите узнать количество дней (если есть), количество часов (если есть), минуты (если есть) и секунды, вы можете сделать следующее:

 $previousTimeStamp = strtotime("2011/07/01 21:12:34"); $lastTimeStamp = strtotime("2013/09/17 12:34:11"); $menos=$lastTimeStamp-$previousTimeStamp; $mins=$menos/60; if($mins<1){ $showing= $menos . " seconds ago"; } else{ $minsfinal=floor($mins); $secondsfinal=$menos-($minsfinal*60); $hours=$minsfinal/60; if($hours<1){ $showing= $minsfinal . " minutes and " . $secondsfinal. " seconds ago"; } else{ $hoursfinal=floor($hours); $minssuperfinal=$minsfinal-($hoursfinal*60); $days=$hoursfinal/24; if($days<1){ $showing= $hoursfinal . "hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago"; } else{ $daysfinal=floor($days); $hourssuperfinal=$hoursfinal-($daysfinal*24); $showing= $daysfinal. "days, " .$hourssuperfinal . " hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago"; }}} echo $showing; 

Вы можете использовать ту же логику, если хотите добавить месяцы и годы.

Простой способ подсчета,

 $currentdate = date('Ymd H:i:s'); $after1yrdate = date("Ymd H:i:s", strtotime("+1 year", strtotime($data))); $diff = (strtotime($after1yrdate) - strtotime($currentdate)) / (60 * 60 * 24); echo "<p style='color:red'>The difference is ".round($diff)." Days</p>"; 
 $date1 = date_create("2017-04-15"); $date2 = date_create("2017-05-18"); //difference between two dates $diff = date_diff($date1,$date2); //count days echo 'Days Count - '.$diff->format("%a"); 

Вы можете использовать date_diff для вычисления разницы между двумя датами:

 $date1 = date_create("2013-03-15"); $date2 = date_create("2013-12-12"); $diff = date_diff($date1 , $date2); echo $diff->format("%R%a days");