Wert des Eingabedatumsdatums-Fehlers einstellen

8

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?

    
Syntax_Error 16.02.2016, 10:00
quelle

2 Antworten

7

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%     
T.J. Crowder 16.02.2016, 10:09
quelle
10
  

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).

    
gurvinder372 16.02.2016 10:02
quelle

Tags und Links