创建循环时间增加15分钟

时间:2011-08-04 21:54:33

标签: php date time

我正在尝试创建一个输出它的循环:

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

8 个答案:

答案 0 :(得分:15)

也可以使用范围功能

来完成
<?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";
}
?>

所以你没有循环,它只是为你创建一个数组(我的循环就是在格式化的时候将它打印出来)

答案 1 :(得分:12)

对我来说看起来不必要的复杂。以下将打印出您想要的内容。据推测,它可以适用于您的代码。对于凌乱的最终条件感到抱歉。

$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点的分钟值,然后反复增加15分钟。然后使用一些数学运算从运行变量中提取小时和分钟。

答案 2 :(得分:9)

我的简单逻辑

   $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>';

    }

在循环中你可以玩你想要的东西

答案 3 :(得分:8)

您需要移动外部for循环外的最后一行。

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查询,然后在时间内挑选出来,否则你每隔15分钟做一次sql查询(37个查询你的样本数据)

答案 4 :(得分:1)

使用PHP 5&gt; = 5.3.0,您可以使用DateTime::add,请参阅:http://www.php.net/manual/de/datetime.add.php

答案 5 :(得分:1)

DateInterval可用于为我们的日期计算创建新的dateinterval对象,并可在任何脚本中使用。适用于所有日期和版本的PHP面向对象风格。时间计算这种格式很有用。

检查以下链接:
http://php.net/manual/en/class.dateinterval.php
http://www.plus2net.com/php_tutorial/date-interval.php

答案 6 :(得分:0)

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

将该行移到最外面的for - 循环之后。

答案 7 :(得分:0)

我正在研究类似的问题,但开始/结束时间可以改变。

这可能需要一点改进,但​​我不能打破它。

您在开始时需要提供的是日期和时间。

$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