Laravel поддержки сбора не работает по срокам есть какое-либо решение? - PullRequest
1 голос
/ 01 октября 2019

Коллекция поддержки Laravel не работает с датой и временем. как я могу это решить?

$timings = collect([]);

for ($i = 1; $i < 24 ; $i++) {
    $timings->push([
        'start_time' => $i.':50:34'
    ]);
}

Вышеуказанный цикл предназначен для генерации 24-часовых таймингов для примера.

Когда мы делаем это, то работает нормально, но также включает ненужные тайминги.

$timings->where('start_time', '<=', '11:59:59')->where('start_time', '>=', '00:00:00');
$timings->where('start_time', '>=', '12:00:00')->where('start_time', '<=', '23:59:59');

Пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 01 октября 2019

Вы, кажется, используете строки вместо объектов даты. строки не подходят для сравнения, которое вы делаете.

Вы можете использовать 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'));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...