Есть ли простой способ получить список дней между двумя датами в PHP?
Я бы хотел, чтобы в конце концов было что-то вроде этого:
(Псевдокод)
date1 = 29/08/2013 date2 = 03/09/2013 resultArray = functionReturnDates(date1, date2);
и полученный массив будет содержать:
resultArray[0] = 29/08/2013 resultArray[1] = 30/08/2013 resultArray[2] = 31/08/2013 resultArray[3] = 01/09/2013 resultArray[4] = 02/09/2013 resultArray[5] = 03/09/2013
например.
$date1 = '29/08/2013'; $date2 = '03/09/2013'; function returnDates($fromdate, $todate) { $fromdate = \DateTime::createFromFormat('d/m/Y', $fromdate); $todate = \DateTime::createFromFormat('d/m/Y', $todate); return new \DatePeriod( $fromdate, new \DateInterval('P1D'), $todate->modify('+1 day') ); } $datePeriod = returnDates($date1, $date2); foreach($datePeriod as $date) { echo $date->format('d/m/Y'), PHP_EOL; }
function DatePeriod_start_end($begin,$end){ $begin = new DateTime($begin); $end = new DateTime($end.' +1 day'); $daterange = new DatePeriod($begin, new DateInterval('P1D'), $end); foreach($daterange as $date){ $dates[] = $date->format("Ymd"); } return $dates; }
не знаю, если это вообще практично, но он работает довольно прямолинейно
$end = '2013-08-29'; $start = '2013-08-25'; $datediff = strtotime($end) - strtotime($start); $datediff = floor($datediff/(60*60*24)); for($i = 0; $i < $datediff + 1; $i++){ echo date("Ymd", strtotime($start . ' + ' . $i . 'day')) . "<br>"; }
Попробуй это:
function daysBetween($start, $end) $dates = array(); while($start <= $end) { array_push( $dates, date( 'dS M Y', $start ) ); $start += 86400; } return $dates; } $start = strtotime('2009-10-20'); $end = strtotime('2009-10-25'); var_dump(daysBetween($start,$end));
$datearray = array(); $date = $date1; $days = ceil(abs($date2 - $date1) / 86400) + 1;//no of days for($i = 1;$i <= $days; $i++){ array_push($datearray,$date); $date = $date+86400; } foreach($datearray as $days){ echo date('Ymd, $days); }