PHP: получите следующие 13 дат с даты?

Я пытаюсь получить массив даты плюс следующие 13 дат, чтобы получить 14-дневный график, начинающийся с определенной даты.

вот моя функция:

$time = strtotime($s_row['schedule_start_date']); // 20091030 $day = 60*60*24; for($i = 0; $i<14; $i++) { $the_time = $time+($day*$i); $date = date('Ym-d',$the_time); array_push($dates,$date); } 

Но, похоже, он повторяет дату, когда месяц переключается.

это то, что я получаю:

2009-10-30 | 2009-10-31 | 2009-11-01 | 2009-11-01 | 2009-11-02 | 2009-11-03 | 2009-11-04 | 2009-11-05 | 2009- 11-06 | 2009-11-07 | 2009-11-08 | 2009-11-09 | 2009-11-10 | 2009-11-11

Обратите внимание, что 2009-11-01 повторяется. Я не могу понять, почему?

Что я делаю не так?

Благодаря!!

Я бы использовал strtotime

 $start = strtotime($s_row['schedule_start_date']); $dates=array(); for($i = 1; $i<=14; $i++) { array_push($dates,date('Ym-d', strtotime("+$i day", $start))); } print_r($dates); 

У вас такая же дата из-за перехода на летнее время . Невозможно добавить 24*60*60 секунд, чтобы найти следующий день, потому что в течение 2 дней в году есть больше / меньше секунд. Когда вы переключаетесь с лета на зимнее, вы добавляете 1 час в день. Таким образом, в этот день будет 25*60*60 секунд, поэтому он не переключается в вашем коде.

Вы можете выполнить свой расчет с помощью mktime() . Например:

 ## calculate seconds from epoch start for tomorrow $tomorrow_epoch = mktime(0, 0, 0, date("m"), date("d")+1, date("Y")); ## format result in the way you need $tomorrow_date = date("MdY", $tomorrow_epoch); 

Или полную версию для вашего кода:

 $dates = array(); $now_year = date("Y"); $now_month = date("m"); $now_day = date("d"); for($i = 0; $i < 14; $i++) { $next_day_epoch = mktime(0, 0, 0, $now_month, $now_day + $i, $now_year); array_push( $dates, date("Ymd", $next_day_epoch) ); } 

Я рекомендую что-то вроде:

 for($i=1;$i<=14;$i++){ echo("$i day(s) away: ".date("m/d/Y",strtotime("+$i days"))); }