PHP: получить следующие 13 дат с даты? - PullRequest
3 голосов
/ 28 октября 2009

Я пытаюсь получить массив дат плюс следующие 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('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 повторяется. Я не могу понять, почему?

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

Спасибо !!

Ответы [ 3 ]

7 голосов
/ 28 октября 2009

Я бы использовал 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);
7 голосов
/ 28 октября 2009

У вас та же дата из-за перехода на летнее время . Нельзя добавлять 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)
    );
}
4 голосов
/ 28 октября 2009

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

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