Skip to content

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

An answer to this question on Stack Overflow.

Question

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.

Answer

Looks unnecessarily complicated to me. The following will print out what you want. Presumably it can be adapted for use in your code. Sorry about the messy end-condition.

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

Or, if you want to do this in a slightly more opaque way...

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

The above calculates a minutes value for 8 o'clock and then adds fifteen minutes repeatedly. You then use some math to extract hours and minutes from the running variable.