массив с датами между двумя разными датами

В настоящее время я работаю над сценарием календаря для личного использования. Поэтому мне нужна ваша помощь 🙂

У меня две даты в формате YYYY-MM-DD.

например:

2012-05-12 and 2012-05-16 

Мне нужны даты между ними:

 2012-05-13 2012-05-14 2012-05-15 

Результат должен быть в массиве. Я не знаю, как начать все равно … так что у вас есть намек?

 function getDates($startTime, $endTime) { $day = 86400; $format = 'Ym-d'; $startTime = strtotime($startTime); $endTime = strtotime($endTime); //$numDays = round(($endTime - $startTime) / $day) + 1; $numDays = round(($endTime - $startTime) / $day); // remove increment $days = array(); for ($i = 1; $i < $numDays; $i++) { //change $i to 1 $days[] = date($format, ($startTime + ($i * $day))); } return $days; } $days = getDates('2012-05-12', '2012-05-16'); 

Вывод:

 Array ( [0] => 2012-05-13 [1] => 2012-05-14 [2] => 2012-05-15 ) 

Как сказал Дэн Ли, я изменил функцию, чтобы получить только интервал дат, исключая первый и последний день из массива.

Вот подход ООП, вы должны использовать его:

 $a = new DateTime('2012-05-12'); $b = new DateTime('2012-05-16'); // to exclude the end date (so you just get dates between start and end date): // $b->modify('-1 day'); $period = new DatePeriod($a, new DateInterval('P1D'), $b, DatePeriod::EXCLUDE_START_DATE); foreach($period as $dt) { echo $dt->format('Ym-d'); } 

Для дальнейшего чтения см. DateTime , DateInterval и DatePeriod .

 $date = date("Ymd", strtotime("2012-05-12")); $final_date = date("Ymd", strtotime("2012-05-16")); while($date < $final_date){ $date = date("Ymd", strtotime($date . " +1 day")); $dates[] = $date; } 
 function GetDays ($sStartDate, $sEndDate ) { $sStartDate = gmdate( 'Ym-d', strtotime( $sStartDate ) ); $sEndDate = gmdate( 'Ym-d', strtotime( $sEndDate ) ); $aDays[] = $sStartDate; $sCurrentDate = $sStartDate; while( $sCurrentDate < $sEndDate ) { $sCurrentDate = gmdate( 'Ym-d', strtotime( '+1 day', strtotime( $sCurrentDate) ) ); $aDays[] = $sCurrentDate; } return $aDays; } print_r ( '2012-05-12', '2012-05-16' ); 

Вот код:

 function createDateRangeArray($strDateFrom,$strDateTo) { // takes two dates formatted as YYYY-MM-DD and creates an // inclusive array of the dates between the from and to dates. // could test validity of dates here but I'm already doing // that in the main script $aryRange=array(); $iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2), substr($strDateFrom,8,2),substr($strDateFrom,0,4)); $iDateTo=mktime(1,0,0,substr($strDateTo,5,2), substr($strDateTo,8,2),substr($strDateTo,0,4)); if ($iDateTo>=$iDateFrom) { array_push($aryRange,date('Ym-d',$iDateFrom)); // first entry while ($iDateFrom<$iDateTo) { $iDateFrom+=86400; // add 24 hours array_push($aryRange,date('Ym-d',$iDateFrom)); } } return $aryRange; } 

Я привел ссылку с этого сайта.