setTimezone($siteTimezone); $last7Start = $todayLocal->subDay(6); $last7End = $todayLocal->getEndOfDay(); $selectedStart = $selected->getDateStart()->setTimezone($siteTimezone); $selectedEnd = $selected->getDateEnd()->getEndOfDay()->setTimezone($siteTimezone); $overlapsLast7 = !$selectedEnd->isEarlier($last7Start) && !$selectedStart->isLater($last7End); if (!$overlapsLast7) { return false; } // server_time is stored in UTC and is indexed with idsite, so querying the latest value is fast. $lastRequest = (new BotRequestsDao())->getLastServerTimeForSiteAndBotType( $idSite, BotDetector::BOT_TYPE_AI_CHATBOT ); if (empty($lastRequest)) { return true; } // Date::factory interprets the stored UTC string, so comparison is done in UTC timestamps. return Date::factory($lastRequest)->isEarlier($last7Start); } }