Fix: Refresh-Verlauf zeigte Zeiten 1 Stunde in der Zukunft
parseUTC() hängte blind ein 'Z' (UTC) an alle Timestamps, aber die DB speichert Lokalzeit (Europe/Berlin). Bei CET (UTC+1) wurden alle Zeiten 1 Stunde zu spät angezeigt. Neue Logik: Timestamps mit 'Z' oder '+' werden direkt geparst. Timestamps ohne Zeitzonen-Info werden als Europe/Berlin interpretiert mit korrektem Offset (auch bei Sommer-/Winterzeit-Wechsel). Betrifft: Refresh-Verlauf, Artikel-Zeitstempel, Snapshots, Lagebild-Stand Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -1,10 +1,26 @@
|
||||
/**
|
||||
* Parst einen UTC-Zeitstring vom Server in ein Date-Objekt.
|
||||
* Parst einen Zeitstring vom Server in ein Date-Objekt.
|
||||
* Timestamps mit 'Z' oder '+' werden direkt geparst (echtes UTC/Offset).
|
||||
* Timestamps ohne Zeitzonen-Info werden als Europe/Berlin interpretiert,
|
||||
* da die DB alle Zeiten in Lokalzeit speichert.
|
||||
*/
|
||||
function parseUTC(dateStr) {
|
||||
if (!dateStr) return null;
|
||||
try {
|
||||
const d = new Date(dateStr.endsWith('Z') ? dateStr : dateStr + 'Z');
|
||||
if (dateStr.endsWith('Z') || dateStr.includes('+')) {
|
||||
const d = new Date(dateStr);
|
||||
return isNaN(d.getTime()) ? null : d;
|
||||
}
|
||||
// DB-Timestamps sind Europe/Berlin Lokalzeit.
|
||||
// Aktuellen Berlin-UTC-Offset ermitteln und anwenden.
|
||||
const normalized = dateStr.replace(' ', 'T');
|
||||
const naive = new Date(normalized + 'Z'); // als UTC parsen
|
||||
if (isNaN(naive.getTime())) return null;
|
||||
// Berlin-Offset fuer diesen Zeitpunkt bestimmen
|
||||
const berlinStr = naive.toLocaleString('sv-SE', { timeZone: 'Europe/Berlin' });
|
||||
const berlinAsUTC = new Date(berlinStr.replace(' ', 'T') + 'Z');
|
||||
const offsetMs = naive.getTime() - berlinAsUTC.getTime();
|
||||
const d = new Date(naive.getTime() + offsetMs);
|
||||
return isNaN(d.getTime()) ? null : d;
|
||||
} catch (e) {
|
||||
return null;
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren