$start_date = '2012-01-01'; $end_date = '2012-12-31'; $total_days = round(abs(strtotime($end_date) - strtotime($start_date)) / 86400, 0) + 1; if ($end_date >= $start_date) { for ($day = 0; $day < $total_days; $day++) { echo "<br />" . date("Ymd", strtotime("{$start_date} + {day} days")); } }
Прямо сейчас это печатает '1969-12-31' снова и снова. Ожидаемый результат должен быть:
2012-01-01 2012-01-02 2012-01-03 ... 2012-12-30 2012-12-31
Вы над кодом будете работать с одним дополнительным символом – вы пропустили $
на этой строке:
echo "<br />" . date("Ymd", strtotime("{$start_date} + {$day} days")); // ^ This was missing
Для этого я использовал бы класс DatePeriod (вместе с DateTime и DateInterval ):
$start_date = '2012-01-01'; $end_date = '2012-12-31'; $start = new DateTime($start_date); $end = new DateTime($end_date); $interval = new DateInterval('P1D'); // 1 day interval $period = new DatePeriod($start, $interval, $end); foreach ($period as $day) { // Do stuff with each $day... echo $day->format('Ym-d'), "\n"; }
<?php $start_date = '2012-01-01'; $end_date = '2012-12-31'; $total_days = round(abs(strtotime($end_date) - strtotime($start_date)) / 86400, 0) + 1; if ($end_date >= $start_date) { for ($day = 0; $day < $total_days; $day++) { echo "<br />" . date("Ymd", strtotime("{$start_date} + {$day} days")); // You missed the $ here ^ } }