NEWS
Datums Interpretation Fehlerhaft
-
Ich kämpfe mit fehlerhaften Verhalten bei Datum. Mir ist rätselhaft, was hier eigentlich falsch läuft. Ein Beispiel:
var lDate1=new Date(2020,1,30,7,52,0); var lDate2=new Date("2020-01-30 07:52:00"); log(lDate1.toString()); // Sun Mar 01 2020 07:52:00 GMT+0100 (GMT+01:00) log(lDate2.toString()); // Thu Jan 30 2020 07:52:00 GMT+0100 (GMT+01:00)
Wie man sieht, werden im ersten Fall die Daten falsch interpretiert. Das gleiche passiert auch bei schedule:
schedule({year:2020,month:1,date:30,hour:11,minute:34,second:0},()=>{ log((new Date().toString())); })
Wenn ich hier das korrekte Datum angebe, dann wird das Ereignis nicht ausgelöst. Weil vermutlich der Monat nicht korrekt interpretiert wird.
Ob das hiermit im Zusammenhang steht, kann ich zwar nicht sagen, aber ich ebenfalls festgestellt, das bei einem schedule-Auftrag die Wochentagsvorgabe nicht mehr so funktioniert, wie in der Dokumentation bzw. wie sie noch letztes Jahr funktioniert hat. Laut Dokumentation sollte der Sonntag mit 0 oder 7 codiert werden können. Aber die 7 funktioniert nicht mehr seit einem Update Ende Dezember. Zum Leidwesen meiner Tochter, denn ihr Zimmer blieb zweimal kalt, weil der schedule-Auftrag am Sonntag mit 7 nicht ausgeführt wurde. -
@jeg sagte in Datums Interpretation Fehlerhaft:
Mir ist rätselhaft, was hier eigentlich falsch läuft
Hab zwar von js nicht die Ahnung, aber das hier ist für mich eindeutig:
var lDate1=new Date(2020,1,30,7,52,0);
wird folgendermassen zerlegt:- 2020 Jahr, korrekt!
- 1 => Tag: 01.
- 30 => Monat: 03 (den 30 gibt es ja nicht
-
@Homoran Nur, dass die Reihenfolge eig Jahr, Monat und Tag ist.
Mir ist selbigen Verhalten schon aufgefallen mit einfachem new Date();
Wenn ich hierbei date.getMonth(); ausführe bekomme ich auch immer einen falschen Monat.
Da scheint glaube generell was nicht zu stimmen.
Konnte ich in meinem Fall mit formatDate lösen -
@Homoran
Manchmal ist man echt blind. Danke. Aber ganz so ist es auch wieder nichtnew Date(year, monthIndex [, day [, hour [, minutes [, seconds [, milliseconds]]]]]);
Es kommt schon zuerst der Monat, aber anders, als ich erwartet hatte:
Das Argument monthIndex ist 0-basiert. Das bedeutet, dass 0 = Januar und 11 = Dezember ist.
Anmerkung: Wenn Date als Konstruktor mit mehr als einem Argument aufgerufen wird und die übergebenen Werte größer als ihr logischer Bereich sind (z. B. 13 wird als Monat genutzt oder 70 wird als Minutenwert eingesetzt) wird der angrenzende Wert angepasst. Z. B. ist new Date(2013, 13, 1) äquivalent zu new Date(2014, 1,) -
@jeg Gut zu wissen, da lag wohl auch mein Fehler.
Also muss man theoretisch immer beim Monat einen drauf addieren?Auch nett zu lesen:
https://stackoverflow.com/a/41992352 -
@CruziX
Wie man es nimmt. Bei der Vorgabe muss man einen Monat abziehen. Für den 30.1.2020 nichtnew Date(2020,01,30)
sondern
new Date(2020,0,30)
klingt für mich eindeutig falsch, weil nach der Lesart müssten ja auch der Tag 0-basiert sein. Dieser ist aber 1 basiert.
Wie dem auch sei, so ist es bei Javascript laut Dokumentation. Wieder was dazu gelernt. -
@jeg Ist echt gut zu wissen, genau der Fehler ist mir vor Tagen nämlich auch passiert.
Als Java/Javascriptler wäre einem das sicherlich sofort aufgefallen -
solltet ihr euch einig sein, dass das ein Fehler ist (wie gesagt ich habe keine Ahnung) dann bitte ein issue im js-Adapter aufmachen
-
@Homoran Das ist kein Fehler im Adapter sondern ein Fehler in Javascript selbst. So ist es auch in jedem Browser und Website. Wenn man im Browser
new Date(2020,1,30)
eingibt, dann kommtSun Mar 01 2020 00:00:00 GMT+0100 (Mitteleuropäische Normalzeit)
zurück. -
@Homoran Ich bin mir relativ sicher, dass die entsprechenden Hilfen (z.B. CRON-Designer) das bereits berücksichtigen.