From 10b14432c7ff1a11ab17364bafd90e472a95b3a9 Mon Sep 17 00:00:00 2001
From: Brieuc Dubois <git@bhasher.com>
Date: Mon, 5 Aug 2024 10:59:12 -0400
Subject: [PATCH] Fix #83

---
 frontend/src/lib/types/message.ts |  4 +++-
 frontend/src/lib/types/session.ts |  7 ++++---
 frontend/src/lib/utils/date.ts    | 26 ++++++++++++++++++++++++++
 3 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/frontend/src/lib/types/message.ts b/frontend/src/lib/types/message.ts
index e083878c..6f518cb6 100644
--- a/frontend/src/lib/types/message.ts
+++ b/frontend/src/lib/types/message.ts
@@ -4,6 +4,8 @@ import { updateMessageAPI, createMessageFeedbackAPI } from '$lib/api/sessions';
 import { toastAlert } from '$lib/utils/toasts';
 import { get, writable, type Writable } from 'svelte/store';
 import Feedback from './feedback';
+import { parse } from 'svelte/compiler';
+import { parseToLocalDate } from '$lib/utils/date';
 
 export default class Message {
 	private _id: number;
@@ -140,7 +142,7 @@ export default class Message {
 			json.id,
 			json.message_id,
 			json.content,
-			new Date(json.created_at),
+			parseToLocalDate(json.created_at),
 			user,
 			session
 		);
diff --git a/frontend/src/lib/types/session.ts b/frontend/src/lib/types/session.ts
index ae52853b..19c2d1ec 100644
--- a/frontend/src/lib/types/session.ts
+++ b/frontend/src/lib/types/session.ts
@@ -11,6 +11,7 @@ import {
 import Message from './message';
 import config from '$lib/config';
 import Feedback from './feedback';
+import { parseToLocalDate } from '$lib/utils/date';
 
 const { subscribe, set, update } = writable<Session[]>([]);
 
@@ -371,9 +372,9 @@ export default class Session {
 			json.token,
 			json.is_active,
 			[],
-			new Date(json.created_at),
-			new Date(json.start_time),
-			new Date(json.end_time),
+			parseToLocalDate(json.created_at),
+			parseToLocalDate(json.start_time),
+			parseToLocalDate(json.end_time),
 			json.language
 		);
 
diff --git a/frontend/src/lib/utils/date.ts b/frontend/src/lib/utils/date.ts
index dfdf5373..665f18c9 100644
--- a/frontend/src/lib/utils/date.ts
+++ b/frontend/src/lib/utils/date.ts
@@ -98,3 +98,29 @@ export function displayDuration(start: Date, end: Date): string | null {
 	if (hours === 0) return minutes + 'm';
 	else return hours + 'h ' + minutes + 'm';
 }
+
+export function parseToLocalDate(dateStr: string): Date {
+	const isDST = isInDST(new Date(dateStr + 'Z'));
+
+	const offset = isDST ? '+02:00' : '+01:00';
+
+	return new Date(dateStr + offset);
+}
+
+function isInDST(date: Date): boolean {
+	const year = date.getUTCFullYear();
+
+	// Calculate the last Sunday in March
+	const startOfDST = new Date(Date.UTC(year, 2, 31));
+	const startDay = startOfDST.getUTCDay();
+	const lastSundayMarch = 31 - startDay;
+	const startOfDSTDate = new Date(Date.UTC(year, 2, lastSundayMarch, 1));
+
+	// Calculate the last Sunday in October
+	const endOfDST = new Date(Date.UTC(year, 9, 31));
+	const endDay = endOfDST.getUTCDay();
+	const lastSundayOctober = 31 - endDay;
+	const endOfDSTDate = new Date(Date.UTC(year, 9, lastSundayOctober, 1));
+
+	return date >= startOfDSTDate && date < endOfDSTDate;
+}
-- 
GitLab