getCustomDateRange($startAt, $endAt, $user); } return $this->getDefaultDateRange($user); } private function getCustomDateRange($startAt, $endAt, $user): array { $startDate = $this->parseDate($startAt); $endDate = $this->parseDate($endAt); if ($startDate->isSameDay($endDate)) { $startDate = $startDate->subDay()->setTime(6, 0); $endDate = $endDate->setTime(6, 0); } else { $startDate = $startDate->setTime(6, 0); $endDate = $endDate->setTime(6, 0); } return [ $startDate->format('Y-m-d H:i:s'), $endDate->format('Y-m-d H:i:s') ]; } private function getDefaultDateRange($user): array { if ($user->isHeadOfDepartment() || $user->isAdmin()) { $startDate = Carbon::now('Asia/Yakutsk') ->firstOfMonth() ->setTime(6, 0); $endDate = Carbon::now('Asia/Yakutsk') ->setTime(6, 0); } else { $startDate = Carbon::now('Asia/Yakutsk') ->subDay() ->setTime(6, 0); $endDate = Carbon::now('Asia/Yakutsk') ->setTime(6, 0); } return [ $startDate->format('Y-m-d H:i:s'), $endDate->format('Y-m-d H:i:s') ]; } private function parseDate($dateInput): Carbon { if (is_numeric($dateInput)) { return Carbon::createFromTimestampMs($dateInput) ->setTimezone('Asia/Yakutsk'); } return Carbon::parse($dateInput, 'Asia/Yakutsk'); } }