【问题标题】:Print time in 15-minute increments between two times in the same day为时间增加 15 分钟创建一个循环
【发布时间】:2011-10-20 09:54:46
【问题描述】:

我正在尝试制作一个将输出以下内容的循环:

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

【问题讨论】:

  • 将您的最后一个 echo_datelist 呼叫移到 for $i 循环之外

标签: php date time


【解决方案1】:

也可以用range函数来完成

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

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

【讨论】:

  • 这是最好的/最优的变种,tnx
  • 非常好!只是时区在这里 IMO 没用。
  • 让事情变得非常简单,你也不必担心上午/下午和12:00的问题,谢谢
【解决方案2】:

在我看来不必要地复杂。以下将打印出您想要的内容。大概它可以适应在您的代码中使用。对混乱的结束条件感到抱歉。

$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 分钟。然后,您可以使用一些数学方法从运行变量中提取小时和分钟。

【讨论】:

  • 模数似乎更好:printf("%d:%02d\n", (int)$i/60, $i%60);
【解决方案3】:

这里是我的简单逻辑

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

    }

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

【讨论】:

    【解决方案4】:

    您需要将最后一行移到外部 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 次查询)

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

          【解决方案7】:
          echo_datelist(17, 0, $day, $month, $year);
          

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

          【讨论】:

            【解决方案8】:

            我正在处理类似的问题,但开始/结束时间是可变的。

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

            一开始您只需要提供日期和时间。

            $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

            【讨论】:

              猜你喜欢
              • 2017-08-26
              • 2012-11-22
              • 2017-06-30
              • 1970-01-01
              • 2013-11-16
              • 1970-01-01
              • 2021-12-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多