Как бы вы l oop каждые 30 минут - PullRequest
0 голосов
/ 06 января 2020

Попытка создать for l oop с выводом HHMM в поле data-time HTML.

В настоящее время у меня есть:

for ($i = 1; $i <= 20; ++$i) {
    echo '<div class="mb-timer-hour"><div class="mb-timer-half" data-time="0830"></div></div>';
}

За исключением этого выдает data-time="0830" каждый раз.

Затем я попытался $h = 30; $h + 30, но затем пошло: 0800, 0830, 0860, 0890, ...

Возможно ли l oop 0800, 0830, 0900, 0930, ...?

Время начала и время окончания являются пользовательскими переменными, поэтому я не жестко закодировал массив.

Вывод, на который я надеялся, был:


<div class="mb-timer-hour"><div class="mb-timer-half" data-time="0830"></div></div>
<div class="mb-timer-hour"><div class="mb-timer-half" data-time="0930"></div></div>
<div class="mb-timer-hour"><div class="mb-timer-half" data-time="1030"></div></div>
...
<div class="mb-timer-hour"><div class="mb-timer-half" data-time="1730"></div></div>

Ответы [ 2 ]

0 голосов
/ 08 января 2020

В итоге я решил эту проблему с помощью следующего кода:

$mb_timer_start = strtotime( 'today 0800' );
$mb_timer_end = strtotime( 'today 1800' );
<div class="mbcontainer mb-timer">
    <div class="mb-timer-container">

        <!-- this is related to: https://stackoverflow.com/a/59637684/1086990 -->
        <div class="mb-marker"></div>

        <?php
            // loop through start H until end H
            for( $i = date('H', $mb_timer_start); $i < date('H', $mb_timer_end); ++$i ) {
                echo '<div class="mb-timer-hour" style="width:calc(100% / ' . $mb_timer_diff . ');" data-time="' . str_pad($i, 2, '0', STR_PAD_LEFT) . '00">';
                    echo '<div class="mb-timer-half" data-time="' . str_pad($i, 2, '0', STR_PAD_LEFT) . '30"></div>';
                echo '</div>';
            }
        ?>

    </div>
</div>

Этот код также изменился с добавлением часа data-time, но цикл все еще оставался под вопросом.

0 голосов
/ 07 января 2020

Вы можете использовать объекты DateTime и всегда добавлять 30 минут (или 60 минут) до достижения конечного времени. Метод форматирования используется в l oop для вывода времени.

$start = '0830';
$end = '1230';
$date_end = date_create($end);

for($date = date_create($start);$date <= $date_end; $date->modify('+30 Minutes')){

  echo '<div class="mb-timer-hour"><div class="mb-timer-half" data-time="'.$date->format('Hi').'"></div></div>';
}

Вывод HTML в al oop нехорошо. Я взял это из вопроса. Если тест выполняется в браузере, текст результата страницы должен быть просмотрен для результата.

...