phploopsdatetimetime-format

Print time in 15-minute increments between two times in the same day


I'm trying to make a loop that will output this:

08:00
08:15
08:30
08:45
09:00
09:15
09:30
09:45
...etc

I need it to go from 08:00 to 17:00.

Here's my code so far:

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);
}

The problem is, it is outputting a 17:00 in between each hour, example:

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

p.s. I know I shouldn't be making iterated trips to the database, but I'll solve that problem after this one.


Solution

  • You need to move the last line outside of the outer for loop.

    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);
    

    In plain terms, you are saying:

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

    Instead of:

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

    I would consider performing your sql query for all hours of the day and then picking out the ones within the time from, otherwise you be doing an sql query for each 15 minute interval (37 queries with your sample data)