diff --git a/aleksis/apps/chronos/models.py b/aleksis/apps/chronos/models.py
index 572975b7d8d37343442c719c380c8c09e7d57423..025d83ddfc73b409d11418013b2ea814d6cadab6 100644
--- a/aleksis/apps/chronos/models.py
+++ b/aleksis/apps/chronos/models.py
@@ -36,7 +36,7 @@ from aleksis.apps.chronos.managers import (
 )
 from aleksis.apps.chronos.util.format import format_m2m
 from aleksis.core.mixins import ExtensibleModel
-from aleksis.core.models import DashboardWidget
+from aleksis.core.models import DashboardWidget, SchoolTerm
 from aleksis.core.util.core_helpers import has_person
 
 
@@ -68,13 +68,23 @@ class TimePeriod(ExtensibleModel):
             year = date.today().year
             week_number = week or getattr(self, "_week", None) or CalendarWeek().week
 
-            if week_number < self.school.current_term.date_start.isocalendar()[1]:
+            if week_number < SchoolTerm.current.date_start.isocalendar()[1]:
                 year += 1
 
             wanted_week = CalendarWeek(year=year, week=week_number)
 
         return wanted_week[self.weekday]
 
+    def get_datetime_start(self, week: Optional[Union[CalendarWeek, int]] = None) -> datetime:
+        """Get datetime of lesson start in a specific week."""
+        day = self.get_date(week)
+        return datetime.combine(day, self.time_start)
+
+    def get_datetime_end(self, week: Optional[Union[CalendarWeek, int]] = None) -> datetime:
+        """Get datetime of lesson end in a specific week."""
+        day = self.get_date(week)
+        return datetime.combine(day, self.time_end)
+
     @classmethod
     def get_next_relevant_day(
         cls, day: Optional[date] = None, time: Optional[time] = None, prev: bool = False
diff --git a/aleksis/apps/chronos/templatetags/week_helpers.py b/aleksis/apps/chronos/templatetags/week_helpers.py
index acfb3a3a8859cc50c9e250520d9bcb32f3764ebe..c97703175ec5c4f39cf1757b5ee426bddb4e0dbb 100644
--- a/aleksis/apps/chronos/templatetags/week_helpers.py
+++ b/aleksis/apps/chronos/templatetags/week_helpers.py
@@ -1,4 +1,4 @@
-from datetime import date
+from datetime import date, datetime
 from typing import Optional, Union
 
 from django import template
@@ -35,6 +35,21 @@ def period_to_date(week: Union[CalendarWeek, int], period) -> date:
     return week_period_to_date(week, period)
 
 
+@register.simple_tag
+def period_to_time_start(week: Union[CalendarWeek, int], period) -> date:
+    return period.get_datetime_start(week)
+
+
+@register.simple_tag
+def period_to_time_end(week: Union[CalendarWeek, int], period) -> date:
+    return period.get_datetime_end(week)
+
+
 @register.simple_tag
 def today() -> date:
     return date.today()
+
+
+@register.simple_tag
+def now_datetime() -> datetime:
+    return datetime.now()
diff --git a/aleksis/apps/chronos/util/date.py b/aleksis/apps/chronos/util/date.py
index 026439d059f7a77d3ccc9031000f059eff868dca..e31775ef74860c2276bfaf39d758c283691e487a 100644
--- a/aleksis/apps/chronos/util/date.py
+++ b/aleksis/apps/chronos/util/date.py
@@ -11,7 +11,7 @@ def week_weekday_from_date(when: date) -> Tuple[CalendarWeek, int]:
 
 def week_weekday_to_date(week: CalendarWeek, weekday: int) -> date:
     """Return a date object for one day in a calendar week."""
-    return week[weekday - 1]
+    return week[weekday]
 
 
 def week_period_to_date(week: Union[CalendarWeek, int], period) -> date: