diff --git a/biscuit/apps/chronos/models.py b/biscuit/apps/chronos/models.py
index 7654c18df8498ed892a1b35e61747e3d10819ad7..0c454a1cce4aaa341590a0f02dcaf4fc69af0a55 100644
--- a/biscuit/apps/chronos/models.py
+++ b/biscuit/apps/chronos/models.py
@@ -40,24 +40,31 @@ class LessonPeriodQuerySet(models.QuerySet):
             select={'_week': wanted_week.week}
         )
 
+    def within_dates(self, start: date, end: date):
+        return self.filter(lesson__date_start__gte=start, lesson__date_end__lte=end)
+
     def on_day(self, day: date):
         week, weekday = week_weekday_from_date(day)
 
-        return self.filter(
-            lesson__date_start__lte=day, lesson__date_end__gte=day,
-            period__weekday=weekday
+        return self.within_dates(day, day).filter(
+            period_weekday=weekday
         ).extra(
             select={'_week': week.week}
         )
 
     def at_time(self, when: Optional[datetime] = None):
         now = when or datetime.now()
+        week, weekday = week_weekday_from_date(now.date())
 
-        return self.filter(lesson__date_start__lte=now.date(),
-                           lesson__date_end__gte=now.date(),
-                           period__weekday=now.isoweekday(),
-                           period__time_start__lte=now.time(),
-                           period__time_end__gte=now.time())
+        return self.filter(
+            lesson__date_start__lte=now.date(),
+            lesson__date_end__gte=now.date(),
+            period__weekday=now.isoweekday(),
+            period__time_start__lte=now.time(),
+            period__time_end__gte=now.time()
+        ).extra(
+            select={'_week': week.week}
+        )
 
     def filter_group(self, group: Union[Group, int]):
         return self.filter(