Christian Seiler: Funktion mit Rückgabe des Datums vor 365 Tagen

Beitrag lesen

Hallo nochmal,

Meine Vermutung ist hier jedoch, dass - da die JS-Lösung in Millisekunden rechnet - dies durch mangelnde Präzision verursacht wird (oder in den Datumsroutinen der Browser ist ein Bug, kann natürlich auch sein).

Ich habe das ganze gerade nochmal überprüft, die JS-Lösung liefert mir für die getTime()/1000-Werte folgendes:

11. August 1945: -767062800
12. September 1476: -15564531600

Und siehe da - schon der erste Timestamp liefert mir incht den 11. August 1945, sondern den 10. September 1945 um 23:00 UTC, da Date in JS in Lokalzeit arbeitet [1] also den 11. September 1945 Lokalzeit. Jetzt lese man sich mal den Abschnitt in SELFHTML zum Date-Objekt durch und siehe da:

| Wenn Sie einen Monat als Zahlenwert übergeben, so wie in den Varianten 3
| und 4, müssen Sie bei 0 zu zählen beginnen. Für Januar müssen Sie also 0
| übergeben, für Februar 1, und für Dezember 11. Dies ist auch der Grund,
| warum für den Monat Oktober nicht 10 sondern 9 übergeben wird.

Und wenn man nun das Date-Objekt richtig nutzt, liefert JS das korrekte Ergebnis:

(new Date(1945,7,11).getTime()-new Date(1476,8,12).getTime())/(1000*60*60*24)

Ergibt: 171266

Und nun stimmt wieder alles.

Viele Grüße,
Christian

[1] Und Zeitzonendaten vor einem bestimmten Datum wohl nicht kennt, weswegen es für diese Daten einen GMT-Offset von 1h annimmt bei Deutscher Zeit.