From 2c7a34e50c7316469900b41ef56a197e36876f73 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Mon, 20 Oct 2025 08:52:11 +0200 Subject: [PATCH] Enhance TimefixService to correctly handle UTC to local time conversion for date and timestamp values; ensure consistent time representation across the application. --- backend/src/services/TimefixService.js | 30 ++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/backend/src/services/TimefixService.js b/backend/src/services/TimefixService.js index 894d67a..4216dcc 100644 --- a/backend/src/services/TimefixService.js +++ b/backend/src/services/TimefixService.js @@ -62,10 +62,21 @@ class TimefixService { // Verwende korrigierte Werte aus Timefix const tf = timefixForEntry[0]; + // WICHTIG: DB speichert UTC, Frontend erwartet lokale Zeit if (typeof tf.fix_date_time === 'string') { + // Parse als UTC und konvertiere zu lokaler Zeit const [datePart, timePart] = tf.fix_date_time.split(' '); - [hours, minutes] = timePart.split(':').map(Number); + const [h, m, s] = timePart.split(':').map(Number); + + // Erstelle UTC-Date aus den Komponenten + const [year, month, day] = datePart.split('-').map(Number); + const utcDate = new Date(Date.UTC(year, month - 1, day, h, m, s)); + + // Extrahiere lokale Stunden/Minuten + hours = utcDate.getHours(); + minutes = utcDate.getMinutes(); } else if (tf.fix_date_time instanceof Date) { + // Date-Objekt: Verwende lokale Zeit hours = tf.fix_date_time.getHours(); minutes = tf.fix_date_time.getMinutes(); } @@ -73,12 +84,23 @@ class TimefixService { action = tf.fix_type; } else { // Keine Korrektur - verwende Original-Werte aus Worklog + // WICHTIG: DB speichert UTC, Frontend erwartet lokale Zeit if (typeof entry.tstamp === 'string') { + // Parse als UTC und konvertiere zu lokaler Zeit const [datePart, timePart] = entry.tstamp.split(' '); - [hours, minutes] = timePart.split(':').map(Number); + const [h, m, s] = timePart.split(':').map(Number); + + // Erstelle UTC-Date aus den Komponenten + const [year, month, day] = datePart.split('-').map(Number); + const utcDate = new Date(Date.UTC(year, month - 1, day, h, m, s)); + + // Extrahiere lokale Stunden/Minuten + hours = utcDate.getHours(); + minutes = utcDate.getMinutes(); } else if (entry.tstamp instanceof Date) { - hours = entry.tstamp.getUTCHours(); - minutes = entry.tstamp.getUTCMinutes(); + // Date-Objekt: Verwende lokale Zeit + hours = entry.tstamp.getHours(); + minutes = entry.tstamp.getMinutes(); } // Parse state