Bug #13593 — Calendar Month View: Drag-and-Drop Off-by-One

github.com/nocodb/nocodb/issues/13593  ·  NocoDB v2026.04.1  ·  Reproduziert: 2026-04-24

Bug-Beschreibung

Beim Drag-and-Drop eines Records im Calendar Month View wird das Datum nicht auf den Ziel-Tag gesetzt, sondern um einen Tag zu früh (Off-by-One im Drop-Handler). Der Issue-Titel "first day of week" ist ungenau — tatsächlich ist es ein Off-by-One-Fehler in der Datumsberechnung beim Drop-Event.

Record von 2026-04-15 auf 2026-04-22 gezogen → persistiert als 2026-04-21.

Ausgangsdatum
2026-04-15
Ziel-Tag
2026-04-22
Persistiert als
2026-04-21
Abweichung
−1 Tag
❌ BUG CONFIRMED: Dragged to 2026-04-22 (April 22 Wed), date persisted as 2026-04-21 instead. Expected 2026-04-22.

Schritt-für-Schritt Ablauf

1 Admin eingeloggt

Erfolgreicher Login in NocoDB v2026.04.1. Das Dashboard ist geladen.

Step 1
2 Calendar Month View — April 2026

Der Kalender zeigt April 2026 in der Monatsansicht. Der Record "KyronTestEvent" liegt auf dem 15. April (Mittwoch, Zeile 3).

Step 2
3 Record auf Ausgangsdatum (15. April)

Record-Datum vor dem Drag via API bestätigt: 2026-04-15. Startposition ist korrekt.

Step 3
4 Positionen ermittelt — Drag beginnt

Quellposition (Record) und Zielposition (22. April) wurden per DOM-Inspektion ermittelt. Quelle: (616, 478), Ziel: (616, 664).

Step 4
5 Drag aktiv — Record über dem 22. April

Der Record wird über den 22. April gezogen (Mittwoch, Zeile 4). Das UI zeigt den Record visuell am Zielort.

⚠ BUG: Das UI zeigt den Record korrekt auf dem 22., aber der Datum-Handler berechnet intern den 21. (Off-by-One).
Step 5
6 Drop abgeschlossen

Mouse-up auf dem 22. April. Der Drop-Handler von NocoDB hat das neue Datum berechnet und in die Datenbank geschrieben.

⚠ BUG: Datum nach Drop via API: 2026-04-21 statt 2026-04-22.
Step 6
7 Nach Seiten-Reload — Bug sichtbar

Die Seite wurde neu geladen um den tatsächlich persistierten Wert zu sehen (wie im Issue-Report beschrieben).

⚠ BUG BESTÄTIGT: Record liegt auf dem 2026-04-21 statt 2026-04-22. Der Record ist um einen Tag nach vorne gerutscht.
Step 7
8 Finaler Zustand — Assertion-Punkt

Zustand unmittelbar vor der Test-Assertion. API-Wert: 2026-04-21. Erwartet: 2026-04-22.

⚠ ASSERTION schlägt fehl: dateAfterReload="2026-04-21" ≠ "2026-04-22"
Step 8