2009-10-28 8 views
3

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

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

$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('Y-m-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 повторяется. Я не могу понять, почему?

Что я делаю неправильно?

Спасибо!

ответ

6

Я хотел бы использовать StrToTime

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

БЫТЬ МЕНЯ НА 23 СЕКУНДА !!!!!!!!! –

7

У вас такая же дата из-за daylight saving time switch. Небезопасно добавлять 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("M-d-Y", $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("Y-m-d", $next_day_epoch) 
    ); 
} 
+0

Это делает так , так что я должен делать вместо этого? Благодарю. –

4

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

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