Вот удобный способ округлить текущее время в большую или меньшую сторону:
$time = time();
$rounded_time = $time % 900 > 450 ? $time += (900 - $time % 900): $time -= $time % 900;
$start = strtotime('12:00am');
$end = strtotime('11:59pm');
for( $i = $start; $i <= $end; $i += 900)
{
$selected = ( $rounded_time == $i) ? ' selected="selected"' : '';
echo '<option' . $selected . '>' . date('g:i a', $i) . '</option>';
}
Вы можете использовать следующую демонстрацию для тестирования, просто добавьте 450 или 900 к переменной $time
.
Редактировать: Согласно комментариям ниже, есть одно условие, которое не будет выполнено, потому что округленное время приводит к переходу на следующий день. Чтобы исправить это, измените строку $selected
на:
$selected = ( ($rounded_time - $i) % (86400) == 0) ? ' selected="selected"' : '';
Это игнорирует часть даты и просто проверяет время. Я обновил демо ниже, чтобы отразить это изменение.
Демо