Hallo Peter,
ich weiß, woran es liegt - aber ich überlege gerade noch an einer Lösung.
Problem ist, dass das Date-Objekt seine Informationen als UTC-Zeit speichert. Wenn Du ein Date-Objekt mit "2023-03-13" erzeugst, dann ist das in Wahrheit "2023-03-13 00:00:00.000" lokaler Zeit und "2023-03-12 23:00:00.000" UTC Zeit. Sobald die Sommerzeit losgeht, ist es sogar "2023-03-12 22:00:00.000" UTC.
Das input-Element übernimmt nicht das Datum der lokalen Zeit, sondern das Datum der UTC Zeit. Was doof ist.
Ich muss jetzt gucken, wie Du ein Datum als UTC-Datum erzeugst. Für Deutschland dürfte es am einfachsten sein, das Date-Objekt mit Uhrzeit 12:00:00 zu erzeugen.
let gestern = new Date(heute.getFullYear(),
heute.getMonth(),
heute.getDate() - 1,
12, 0, 0);
Diese Lösung ist nicht für alle Länder tragfähig, aber in D schon.
Ich habe gerade noch bei Stackoverflow einen interessanten Hack gefunden: Schwedisches Datum!
let gestern = new Date(heute.getFullYear(),
heute.getMonth(),
heute.getDate() - 1)
console.log(gestern.toLocaleString("sv").substring(0,10));
// Ausgabe am 14.03.2023: "2023-03-13 00:00:00"
Das schwedische Datumsformat ist YYYY-MM-DD, also ISO-ähnlich. d.h. auf diese Weise bekommst Du einen ISO Datumsstring ohne Timezone-Verfälschung. Den kannst Du dann dem value des input-Elements zuweisen.
inputElement.value = gestern.toLocaleString("sv").substring(0,10);
Schön ist anders, aber funktioniert 😀
Rolf
sumpsi - posui - obstruxi