Ich habe diesen Bug untersucht und festgestellt, dass es tatsächlich drei verschiedene Symptome gibt, die eine gemeinsame Ursache haben.
Die Ursache
Das Frontend verwendet dayjs für alle Datumsberechnungen. Eine Box des Dashboards (EDF Tempo) lud das Timezone-Plugin von dayjs, um die Pariser Zeit zu lesen.
Das Problem: dayjs.extend() ändert dayjs global für die gesamte Anwendung. Und die Kalenderbibliothek (react-big-calendar) enthält diesen Test:
// wenn das Timezone-Plugin geladen ist, dann die timezone-aware-Version verwenden
const dayjs = dayjsLib.tz ? dayjsLib.tz : dayjsLib;
Sobald das Plugin vorhanden ist, wechselt der Kalender alle Berechnungen zu dayjs.tz, das sich anders verhält:
es interpretiert bestimmte Daten als UTC → das Zeitraster verschiebt sich um 2 Stunden
add(1, ‹ Tag ›) fügt 24 Stunden absolut hinzu, aber der Tag des Wechsels zur Winterzeit dauert 25 Stunden → man landet um 23 Uhr am selben Tag, daher wird das Datum zweimal angezeigt
startOf(‹ Monat ›) verschiebt sich um eine Stunde, was den Monatsvergleich verfälscht → das Grau wird invertiert
Wichtiger Punkt: Diese Box wurde statisch mit allen anderen importiert, daher wurde das Plugin geladen, selbst wenn Sie EDF Tempo nie verwendet haben.
Der Fix
Statt den Kalender zu flicken, habe ich die Ursache beseitigt: Die EDF-Tempo-Box verwendet jetzt Intl.DateTimeFormat (nativ, ohne Nebenwirkungen), um die Pariser Zeit zu lesen. Das Geschäftsverhalten ist identisch — die vollen/halben Stunden bleiben in französischer Zeit definiert, unabhängig von Ihrer Zeitzone.
Es gibt noch einen Fix im Kalender für einen von diesem unabhängigen Bug: Der Tag des Zeitwechsels zeigte 26 Stundenzeilen im Oktober und 22 im März statt 24, und die Ereignisse waren falsch positioniert (ein Termin um 14 Uhr wurde um 13:26 Uhr angezeigt).