Laravel: как я могу получить все даты между диапазонами дат и все даты в пределах диапазонов дат отдельно?
Я пытаюсь получить все даты между 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?

16.11.2019 06:29:47
Как вы решили свой первый вопрос. Теперь я пытаюсь помочь вам в последнем. Опять же есть так много способов решить эту проблему, легкий (хотя и не умный, но плавает лодка ;) ) путь:
Вы можете просто срезать первый и последний элемент из массива дат. как правило , вы можете использовать сдвиг массива и поп
array_shift($all_dates);
array_pop($all_dates);
вы также можете использовать array_slice, но я думаю, что shift и pop лучше, чем slice. он работает лучше.





