Как правильно сравнить время?
$times = ['12:05', '14:05', '16:05', '18:05', '20:05'];
$now = new \DateTime();
$filteredTimes = array_filter($times, function ($time) use ($now) {
    $diff = (new \DateTime($time))->diff($now);
    // оставляем в массиве только время
    // которое наступит только через пол часа минимум.
    return $diff->invert && $diff->h * 60 + $diff->i > 30;
});
ideone.com/7f4jcN
Замените $diff->format('%i%'); на (int)$diff->format('%R%i%');
будет со знаком выводить, если < 0, значит первая дата больше второй.