diff --git a/frontend/src/lib/types/message.ts b/frontend/src/lib/types/message.ts index e083878c2f6e7b3f0fd736e3138c236764e822a7..6f518cb61950efb98f44a1fdcd32804f3da50a85 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 ae52853b222805d673afd2ea8b50cac3fd37c3ee..19c2d1ec9062a6425df82c9d608e528e34d5b291 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 dfdf53735dcf13981362ee0e000d6a1e3f6a313e..665f18c919f03397c6ebb3139079cd82eb8578e5 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; +}