Ich habe 2 Felder Eingabe- und Ausgabedaten. Unter bestimmten Bedingungen habe ich das endDate auf 1 Jahr vor dem Startdatum gesetzt.
%Vor% %Vor%Das Problem, wenn ich das Startdatum auf den 29.2.2016 gesetzt habe Ich habe den folgenden Fehler erhalten:
Der angegebene Wert "2017-02-29" entspricht nicht den Anforderungen Format, "JJJJ-MM-TT".
Ich habe erwartet, dass die Funktion Date () sich darum kümmert. Anscheinend tun sie das nicht. Ist das ein Fehler?
Ist das sowieso schneller als eine Menge if -Anweisungen?
Das eigentliche Problem ist, dass Sie den Wert von getMonth
verwendet haben, ohne 1 hinzuzufügen. Der Wert von getMonth
beginnt bei 0 (Januar), aber die Monatswerte in Ihrem yyyy-MM-dd
-Format beginnen mit 1.
Also:
%Vor% Das Ergebnis ist, dass Sie eine ungültige Zeichenfolge, 2017-02-29
, erhalten haben, obwohl Sie das Date
-Objekt verwendet haben, was in der Tat sicherstellen wird, dass es nur gültige Daten liefert. Das Objekt Date
enthielt das Datum März 29., nicht den 29. Februar.
Allerdings:
Unter bestimmten Bedingungen habe ich das endDate auf 1 Jahr vor dem Startdatum gesetzt.
Dein Code tut das nicht. Es fügt ein Jahr und einen Monat hinzu, nicht nur ein Jahr:
%Vor% Wenn Sie nur ein Jahr hinzufügen möchten, entfernen Sie die erste dieser beiden Zeilen. Zusammen mit der Korrektur der Verwendung von getMonth
bei der Bildung der Zeichenfolge wird dem Datum zuverlässig ein Jahr hinzugefügt (mit möglichem Monat-Rollover).
Also:
%Vor%Der angegebene Wert "2017-02-29" entspricht nicht den Anforderungen Format, "JJJJ-MM-TT".
2017-02-29
ist kein gültiges Datum. 29th feb
des nächsten Jahres (2017) ist nicht möglich.
Nur Schaltjahre haben Februar Monat des 29.
Versuchen Sie stattdessen 2016-02-29
.
Ist das sowieso schneller als eine Menge if-Anweisungen?
Sie müssen keine Menge von if -Anweisungen hinzufügen. Sie können diese Antwort
verwenden %Vor%Wenn Sie bei der Beantwortung Ihrer Frage das Datum explizit auf "2017-02-29" setzen, wird ein Fehler ausgegeben.
Nehmen Sie Änderungen am Datumsobjekt selbst vor und übernehmen Sie dieses Datumsobjekt mit
auf die Eingabe %Vor%Jetzt sollte es sich darum kümmern, in den nächsten Monat zu rollen.
Bearbeiten (basierend auf dem Kommentar von TJ)
Jedes Jahr treten Schaltjahre auf, die durch 4 teilbar sind, mit Ausnahme der durch 100 teilbaren Schaltjahre (die keine Schaltjahre sind), mit Ausnahme der durch 400 teilbaren Schaltjahre (Schaltjahre).
Tags und Links javascript jquery html5