Создание цикла для увеличения времени на 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
Ответы
Ответ 1
Вам нужно переместить последнюю строку за пределы внешнего цикла.
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 запросов с вашими данными примера)
Ответ 2
это также можно сделать с помощью функции диапазона
<?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";
}
?>
поэтому у вас нет цикла, он просто создает для вас массив (мой цикл - это просто его распечатать при форматировании)
Ответ 3
Выглядит излишне сложным для меня. Следующее выведет, что вы хотите. Предположительно, он может быть адаптирован для использования в вашем коде. Извините за грязное конечное условие.
$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 часов, а затем добавляет пятнадцать минут. Затем вы используете некоторую математику для извлечения часов и минут из текущей переменной.
Ответ 4
моя простая логика здесь
$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>';
}
в цикле вы можете играть, что хотите.
Ответ 5
С PHP 5 >= 5.3.0 вы можете использовать DateTime::add
, см. http://www.php.net/manual/de/datetime.add.php
Ответ 6
echo_datelist(17, 0, $day, $month, $year);
Переместите эту строку сразу после внешнего for
-loop.
Ответ 7
Я работал над подобной проблемой, но с временем начала/окончания, которое было изменчивым.
для этого может потребоваться небольшое уточнение, но я не могу его сломать.
все, что вам нужно указать в начале, это дата и время.
$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 часов
5:15
5:30
5:45
6:00
6:15
6:30
6:45
7:00
7:15
Ответ 8
DateInterval
можно использовать для создания нового объекта DateInterval
для расчета даты и использования в любом script. В ориентированном на PHP объектно-ориентированном стиле для всех вычислений даты и времени этот формат полезен.
Проверьте ссылки ниже:
http://php.net/manual/en/class.dateinterval.php
http://www.plus2net.com/php_tutorial/date-interval.php