Here's an improved version of the Alex function , which uses seconds for more accuracy:
function hoursRange( $lower = 0, $upper = 86400, $step = 3600, $format = '' ) { $times = array(); if ( empty( $format ) ) { $format = 'g:i a'; } foreach ( range( $lower, $upper, $step ) as $increment ) { $increment = gmdate( 'H:i', $increment ); list( $hour, $minutes ) = explode( ':', $increment ); $date = new DateTime( $hour . ':' . $minutes ); $times[(string) $increment] = $date->format( $format ); } return $times; }
So, to make an array of times at 1-hour intervals over a 24-hour period, use the default values:
hoursRange();
Which will give you the following:
Array ( [00:00] => 12:00 am [01:00] => 1:00 am [02:00] => 2:00 am [03:00] => 3:00 am [04:00] => 4:00 am [05:00] => 5:00 am [06:00] => 6:00 am [07:00] => 7:00 am [08:00] => 8:00 am [09:00] => 9:00 am [10:00] => 10:00 am [11:00] => 11:00 am [12:00] => 12:00 pm [13:00] => 1:00 pm [14:00] => 2:00 pm [15:00] => 3:00 pm [16:00] => 4:00 pm [17:00] => 5:00 pm [18:00] => 6:00 pm [19:00] => 7:00 pm [20:00] => 8:00 pm [21:00] => 9:00 pm [22:00] => 10:00 pm [23:00] => 11:00 pm )
Here are some examples:
// Every 15 Minutes, All Day Long $range = hoursRange( 0, 86400, 60 * 15 ); // Every 30 Minutes from 8 AM - 5 PM, using Custom Time Format $range = hoursRange( 28800, 61200, 60 * 30, 'h:ia' );
You can view the working snippet in CodePad .
rjb
source share