Con una versión reciente de PHP eso sería:
Código PHP:
Ver original<?php
$begin = new DateTime('8:00:00');
$end = new DateTime('21:00:00');
$interval = new DateInterval('PT30M');
$daterange = new DatePeriod($begin, $interval, $end->add($interval));
foreach($daterange as $date){
echo $date->format("H:i:s") . '<br />';
}
Consulta sobre mktime y strtotime para hacerlo con otras funciones.