Вы, кажется, используете строки вместо объектов даты. строки не подходят для сравнения, которое вы делаете.
Вы можете использовать Carbon
для создания красивых объектов даты (углерод уже включен в laravel)
$timings = collect([]);
for ($i = 1; $i < 24 ; $i++) {
$timings->push([
'start_time' => Carbon::createFromTimeString($i.':50:34', 'Europe/London')
]);
}
Как этоответ гласит:
Для коллекций метод where()
не принимает оператор. Это только сравнение равенства. Первый параметр - это ключ, второй - это значение, а третий - логическое значение, обозначающее произвольное сравнение (==) и строгое сравнение (===).
Что вы ищетеэто метод filter()
. Вы передаете закрытие, которое выполняет сравнение дат. Если Closure возвращает true, элемент остается в коллекции. Если он возвращает false, элемент удаляется из коллекции.
Фильтр в вашем случае будет выглядеть так:
$timings = $timings->filter(function ($item) {
return (data_get($item, 'start_time') <= Carbon::createFromTimeString('11:59:59', 'Europe/London'))
&& (data_get($item, 'start_time') >= Carbon::createFromTimeString('00:00:00', 'Europe/London'));
});