Laravel: как я могу получить все даты между диапазонами дат и все даты в пределах диапазонов дат отдельно?


Laravel: как я могу получить все даты между диапазонами дат и все даты в пределах диапазонов дат отдельно?

16.11.2019 06:15:28 Просмотров 127 Источник

Я пытаюсь получить все даты между N диапазонами дат и дополнительно все даты в этих диапазонах дат.

Контроллер:

public function index()
{
    $startDate = new Carbon('2019-11-20');
    $endDate = new Carbon('2019-11-27');
    $all_dates = array();
    while ($startDate->lte($endDate)) {
        $all_dates[] = $startDate->toDateString();
        $startDate->addDay();
    }
    return $all_dates;
}

Мой выход выглядит хорошо. Это именно то, что мне нужно:

["2019-11-20","2019-11-21","2019-11-22","2019-11-23","2019-11-24","2019-11-25","2019-11-26","2019-11-27"]

Я пробовал разные способы передачи диапазонов дат из моей базы данных в мою функцию. Но это не работает. В моей таблице есть два важных поля:

$query = DB::select('start_date', 'end_date')->get();

1: Что я могу сделать, чтобы получить тот же результат, как в моем примере?

2: Как я могу игнорировать в моем выходе дату начала и дату окончания каждого диапазона дат? Мне просто нужны даты в пределах диапазона дат.

ОБНОВЛЕНИЕ:

Так что я нашел способ для первого вопроса. Моя таблица имеет в настоящее время две строки:

id | start_date | end_date
 1 | 2019-11-22 | 2019-11-24
 2 | 2019-11-26 | 2019-11-28

Я расширил свою рабочую функцию с помощью двух запросов к базе данных (по одному для каждого поля) и объединил их с циклом.

public function index()
{
    $query_start_dates = Bookings::select('start_date')->get();
    $start_dates = array();
    $multiple_start_date = json_decode($query_start_dates, true);
    foreach($multiple_start_date as $single_start_date)
    $start_dates[] = implode(', ', $single_start_date);

    $query_end_dates = Bookings::select('end_date')->get();
    $end_dates = array();
    $multiple_end_date = json_decode($query_end_dates, true);
    foreach($multiple_end_date as $single_end_date)
    $end_dates[] = implode(', ', $single_end_date);

    $all_dates = array();

    foreach(array_combine($start_dates, $end_dates) as $f => $n) {
        $startDate = new Carbon($f);
        $endDate = new Carbon($n);
        while ($startDate->lte($endDate)) {
            $all_dates[] = $startDate->toDateString();
            $startDate->addDay();
        }
    }

    return $all_dates;
}

Мой новый выход:

["2019-11-22","2019-11-23","2019-11-24","2019-11-26","2019-11-27","2019-11-28"]

Это не выглядит умным, но он отлично работает ;) теперь мне просто нужно решение для моего второго вопроса.

Спасибо!

У вопроса есть решение - Посмотреть?

Ответы - Laravel: как я могу получить все даты между диапазонами дат и все даты в пределах диапазонов дат отдельно? / Laravel: How can I get all dates between date ranges and all dates within date ranges separately?

Является ответом!
fahim152

16.11.2019 06:29:47

Как вы решили свой первый вопрос. Теперь я пытаюсь помочь вам в последнем. Опять же есть так много способов решить эту проблему, легкий (хотя и не умный, но плавает лодка ;) ) путь:

Вы можете просто срезать первый и последний элемент из массива дат. как правило , вы можете использовать сдвиг массива и поп

array_shift($all_dates);
array_pop($all_dates);

вы также можете использовать array_slice, но я думаю, что shift и pop лучше, чем slice. он работает лучше.

https://stackoverflow.com/questions/58892129/laravel-how-can-i-get-all-dates-between-date-ranges-and-all-dates-within-date-r/58892275#comment104050359_58892275
Большое спасибо, но это похоже на фильтр. Наконец, мне нужно вывести каждую дату диапазона дат. Каждая строка в моей таблице (бронирование) имеет дату начала и дату окончания. Вот почему я не думаю, что ваш подход правильный?
https://stackoverflow.com/questions/58892129/laravel-how-can-i-get-all-dates-between-date-ranges-and-all-dates-within-date-r/58892275#comment104050464_58892275
Я предполагаю, что вам нужны все даты только правильно ? вы можете использовать наглеют, вместо того, чтобы узнать, чем. попробуйте использовать функцию pluck (). Я отредактировал мой Анс. pluck вернет вам конкретное значение столбца, которое вы хотите в массиве
https://stackoverflow.com/questions/58892129/laravel-how-can-i-get-all-dates-between-date-ranges-and-all-dates-within-date-r/58892275#comment104052374_58892275
Спасибо! Я не нашел подходящего способа с помощью pluck. Взгляните на мое обновление. Может быть, у вас есть идея для второго вопроса или какие-то другие улучшения для первого?
https://stackoverflow.com/questions/58892129/laravel-how-can-i-get-all-dates-between-date-ranges-and-all-dates-within-date-r/58892275#comment104052511_58892275
Проверь мой ответ братан. отредактировано :) очень надеюсь, что это поможет
https://stackoverflow.com/questions/58892129/laravel-how-can-i-get-all-dates-between-date-ranges-and-all-dates-within-date-r/58892275#comment104052918_58892275
Отлично, большое спасибо!! Это очень простой способ :)
https://stackoverflow.com/questions/58892129/laravel-how-can-i-get-all-dates-between-date-ranges-and-all-dates-within-date-r/58892275#comment104052982_58892275
добро пожаловать братан :)
Помочь в развитии проекта:
Закрыть X