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