Создание дат + раз в 15 минут не работает

Мой php код ниже должен создать список следующих дат + время.

// your code goes here
$maxdays = 1;
for($daynumber=0;$daynumber<$maxdays;$daynumber++){
    $currentdayval = "+".(string)($daynumber-$maxdays)." days";
    $minutes=0;
    for($quarter=0;$quarter<24*4;$quarter++){
        $minutes += $quarter*15;
        $currentminutesval = $minutes." minutes";
        $date_sql = date("Y-m-d H:i:s",strtotime($currentdayval." + ".$currentminutesval)); //current date
        echo $date_sql. "\n";
    }//for $quarter

}//for $daynr

Но результаты ниже показывают, что не каждая дата / время следует за 15 минутами после предыдущей даты / времени. Не уверен, где мой код идет не так (?)

2014-06-26 12:44:15
2014-06-26 12:59:15
2014-06-26 13:29:15
2014-06-26 14:14:15
2014-06-26 15:14:15
2014-06-26 16:29:15
2014-06-26 17:59:15
2014-06-26 19:44:15
2014-06-26 21:44:15
2014-06-26 23:59:15
2014-06-27 02:29:15
2014-06-27 05:14:15
2014-06-27 08:14:15
2014-06-27 11:29:15

3 ответа

Решение

Чтобы ваш код работал, вам нужно $minutes быть 0, потом 15, потом 30, потом 45...

Но потому что вы увеличиваете, вы получаете $minutes установите 0, затем 15... затем 45 (15+30), затем 90 (15+30+45), затем 150 (15+30+45+60)...

Пытаться $minutes = $quarter * 15; вместо +=

Вот альтернативный способ, который намного чище, чем ваше текущее решение, и позволяет избежать потенциальных проблем с математикой, как у вас:

$start    = new DateTime();
$finish   = new DateTime("+{maxdays} days");
$interval = new DateInterval('PT15M');
$period   = new DatePeriod($start, $interval, $finish);
foreach ($period as $date) {
    printf("%s\n<br>", $date->format('Y-m-d H:i:s'));
}

демонстрация

Он создает ваши начальную и конечную дату / время и ваш интервал в 15 минут. Затем он использует DatePeriod, чтобы просмотреть их и вывести дату и время. Вся математика даты сделана PHP для вас.

Попробуйте заменить

$minutes += $quarter*15;

От

$minutes += 15;
Другие вопросы по тегам