Intereting Posts
PHP shuffle не работает, как ожидалось, на моем вложенном массиве Массив массива PHP, включая ключи Управление внешними ключами Правильное кодирование символов для отображения «& acirc; & # 128; & # 157;»? Пользовательский запрос Visual Composer с оператором OR Как вызвать пакет из php, имеющий процедуру в oracle, используя драйверы oci? Наследование класса в PHP 5.2: переопределение статической переменной в классе расширения? выполнение нескольких preg_replace с различным поиском и заменой каждый раз PHP Установить SSH2 на компьютере с Windows Как создать новое предупреждение Google, доставляющее его для подачи, используя PHP cURL Использование Apache ANT для развертывания веб-приложений? Есть ли многоразовый маршрутизатор / диспетчер для PHP? не удалось подключиться к базе данных Godaddy Mysql Как избежать потери макросов в PHPExcel? MYSQL PHP Нет выбранной базы данных – не удается найти ошибку

создание цикла для увеличения времени на 15 минут

Я пытаюсь сделать цикл, который будет выводить это:

08:00 08:15 08:30 08:45 09:00 09:15 09:30 09:45 

мне нужно, чтобы он проходил с 08:00 до 17:00

до сих пор мой код:

 function echo_datelist ($i, $j, $day, $month, $year) { $time = str_pad($i, 2, '0', STR_PAD_LEFT).':'.str_pad($j, 2, '0', STR_PAD_LEFT); $date = strtotime("$month $day $year $time:00"); $sql = mysql_query("select b.room_type, c.name from bookings as b, customers as c where b.the_date='$date' and b.id_customer=c.id"); echo $time.'<br />'; } for ($i = 8; $i <= 16; $i++) { for ($j = 0; $j <= 45; $j+=15) echo_datelist($i, $j, $day, $month, $year); echo_datelist(17, 0, $day, $month, $year); } 

проблема в том, что он выводит 17:00 между часами, например:

 08:00 08:15 08:30 08:45 17:00 09:00 09:15 09:30 09:45 17:00 

Вам нужно переместить последнюю строку за пределы внешнего цикла.

 for ($i = 8; $i <= 16; $i++){ for ($j = 0; $j <= 45; $j+=15){ //inside the inner loop echo_datelist($i, $j, $day, $month, $year); } //inside the outer loop } //outside the outer loop echo_datelist(17, 0, $day, $month, $year); 

В простом выражении вы говорите:

 For each hour between 8 and 16 For each 15 minute interval Echo the time End Echo 17:00 End 

Вместо:

 For each hour between 8 and 16 For each 15 minute interval Echo the time End End Echo 17:00 

Я бы рассмотрел возможность выполнения вашего sql-запроса для всех часов дня, а затем извлечения из них в течение времени, иначе вы будете делать запрос sql для каждого 15-минутного интервала (37 запросов с вашими данными примера)

это также можно сделать с помощью функции диапазона

 <?php date_default_timezone_set("Europe/London"); $range=range(strtotime("08:00"),strtotime("17:00"),15*60); foreach($range as $time){ echo date("H:i",$time)."\n"; } ?> 

так что у вас нет цикла, он просто делает массив для вас (мой цикл – это просто его распечатать во время форматирования)

Мне кажется излишне сложным. Следующее выведет, что вы хотите. Предположительно, он может быть адаптирован для использования в вашем коде. Извините за грязное конечное условие.

 $min=array("00","15","30","45"); for($i=8;$i<17;$i++) foreach ($min as $v) print "$i:$v\n"; print "17:00\n"; 

Или, если вы хотите сделать это немного более непрозрачным способом …

 for($i=8*60;$i<=17*60;$i+=15) print floor($i/60) . ":" . ($i/60-floor($i/60))*60 . "\n"; 

Вышеуказанное вычисляет значение минут для 8 часов, а затем добавляет пятнадцать минут. Затем вы используете некоторую математику для извлечения часов и минут из текущей переменной.

моя простая логика здесь

  $start=strtotime('00:00'); $end=strtotime('23:30'); for ($i=$start;$i<=$end;$i = $i + 15*60) { //write your if conditions and implement your logic here echo date('g:i A',$i).'<br>'; } 

в цикле вы можете играть, что хотите

С PHP 5> = 5.3.0 вы можете использовать DateTime::add , см. http://www.php.net/manual/de/datetime.add.php

 echo_datelist(17, 0, $day, $month, $year); 

Переместите эту строку сразу после самой внешней for -loop.

Я работал над подобной проблемой, но с временем начала / окончания менялся.

это может потребоваться немного уточнения, но я не могу его сломать.

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

 $day = "10/14/2011"; $startTime = date(strtotime($day." 16:00")); $endTime = date(strtotime($day." 19:15")); $timeDiff = round(($endTime - $startTime)/60/60); $startHour = date("G", $startTime); $endHour = $startHour + $timeDiff; for ($i=$startHour; $i <= $endHour; $i++) { for ($j = 0; $j <= 45; $j+=15) { $time = $i.":".str_pad($j, 2, '0', STR_PAD_LEFT); echo (date(strtotime($day." ".$time)) <= $endTime) ? date("g:i", strtotime($day." ".$time))."<br>" : ""; } } 

выходы:

4:00 4:15 4:30 4:45 5:00 5:15 5:30 5:45 6:00 6:15 6:30 6:45 7:00 7:15

DateInterval может быть использован для создания нового объекта dateinterval для расчета даты и использования в любом скрипте. В ориентированном на PHP объектно-ориентированном стиле для всех вычислений даты и времени этот формат полезен.

Проверьте ссылки ниже:
http://php.net/manual/en/class.dateinterval.php
http://www.plus2net.com/php_tutorial/date-interval.php