Собственно задача:
Перебрать временной массив вида
[
0 => '12:05',
1 => '14:05',
2 => '16:05',
3 => '18:05',
4 => '20:05'
]
И каждый элемент, переведя в формат даты, сравнить с текущим временем и если, например, текущее время 17:45, т.е текущее время максимум на 15-20 минут меньше чем то, которое является значением элемента массива в текущей итерации, то вытащить все элементы(с 0 по 3 в данном случае).
Через foreach прохожусь по массиву, время привел к формату DateTime, дабы можно было сравнивать простыми операторами сравнения. И разницу узнаю через DateTime::diff(), но этот метод показывает разницу по модулю, т.е не ясно, больше текущее время или меньше, чем то, которое является значением элементы текущей итерации цикла. Как быть? Возможно есть более простой путь для решения задачи? Код прикрепляю ниже. Спасибо.
$dateToday = new DateTime ('NOW');
$timesClose['time'] = array( // Значения динамические
0 => '12:05',
1 => '14:05',
2 => '16:05',
3 => '18:05',
4 => '20:05'
);
foreach ($timesClose['time'] as $key => $val) {
$val = date_create_from_format('H:i', $val);
$diff = date_diff($val, $dateToday);
if ($dateToday < $val && $diff->format('%i%') < 30) { // Максимально допустимая разница 30 минут;
$number = $key; // $number используется в дальнейшем, чтобы сделать срез массива
break;
}
}