Improve how date ranges work on schedule API calls.
This commit is contained in:
parent
4f24a846a6
commit
d83a8a4641
|
@ -20,8 +20,8 @@ trait HasScheduleDisplay
|
|||
$dateRange = $this->getDateRange($request, $tz);
|
||||
|
||||
return new DateRange(
|
||||
$dateRange->getStart()->subDay()->startOf('day'),
|
||||
$dateRange->getEnd()->endOf('day')
|
||||
$dateRange->getStart(),
|
||||
$dateRange->getEnd()
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -34,14 +34,14 @@ trait HasScheduleDisplay
|
|||
): array {
|
||||
$events = [];
|
||||
|
||||
$startDate = $dateRange->getStart();
|
||||
$endDate = $dateRange->getEnd();
|
||||
$loopStartDate = $dateRange->getStart()->subDay()->startOf('day');
|
||||
$loopEndDate = $dateRange->getEnd()->endOf('day');
|
||||
|
||||
foreach ($scheduleItems as $scheduleItem) {
|
||||
/** @var StationSchedule $scheduleItem */
|
||||
$i = $startDate;
|
||||
$i = $loopStartDate;
|
||||
|
||||
while ($i <= $endDate) {
|
||||
while ($i <= $loopEndDate) {
|
||||
$dayOfWeek = $i->dayOfWeekIso;
|
||||
|
||||
if (
|
||||
|
@ -56,7 +56,10 @@ trait HasScheduleDisplay
|
|||
$rowEnd = $rowEnd->addDay();
|
||||
}
|
||||
|
||||
$events[] = $rowRender($scheduleItem, $rowStart, $rowEnd, $now);
|
||||
$itemDateRange = new DateRange($rowStart, $rowEnd);
|
||||
if ($itemDateRange->isWithin($dateRange)) {
|
||||
$events[] = $rowRender($scheduleItem, $rowStart, $rowEnd, $now);
|
||||
}
|
||||
}
|
||||
|
||||
$i = $i->addDay();
|
||||
|
|
|
@ -38,4 +38,10 @@ final class DateRange
|
|||
{
|
||||
return $time->between($this->start, $this->end);
|
||||
}
|
||||
|
||||
public function isWithin(self $toCompare): bool
|
||||
{
|
||||
return $this->getEnd() >= $toCompare->getStart()
|
||||
&& $this->getStart() <= $toCompare->getEnd();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue