Ich versuche, eine Zeichenfolge in ein Datumsobjekt zu konvertieren, und es funktioniert für alle Tage außer für den 31. Dezember, wo nach Objekt der 1. Dezember anstelle des 31. Dezember angezeigt wird. Ich habe keine Idee warum. Hier ist mein JavaScript
Code:
var dt = new Date();
dt.setDate("31");
dt.setMonth("11");
dt.setFullYear("2014");
aber mein variabler Wert ist:
Mon Dec 01 2014 11:48:08 GMT+0100 (Paris, Madrid)
Wenn ich dasselbe für ein anderes Datum mache, kehrt mein Objekt zum entsprechenden Wert zurück. Hast du eine Ahnung, was ich falsch gemacht habe?
javascript
date
datetime
user2859409
quelle
quelle
Date
Parameter des Konstruktors direkt verwenden:new Date(2014, 11, 31)
Antworten:
: ( nicht sicher für Monate unter 31 Tagen )setMonth
sollte vorhersetDate
Und
setMonth
‚s zweiter Parameter könnte auch auf eingestellte Datum verwendet werden.Wenn für den Konstruktor keine Argumente angegeben werden, werden das aktuelle Datum und die aktuelle Uhrzeit gemäß den Systemeinstellungen verwendet.
Die Verwendung von
setMonth
undsetDate
separat würde also immer noch zu unerwarteten Ergebnissen führen.Wenn die eingestellten Werte größer als ihr logischer Bereich sind , wird der Wert automatisch an den benachbarten Wert angepasst .
Wenn zum Beispiel heute ist
2014-09-30
, dannUm dies zu vermeiden, legen Sie die Werte direkt mit dem Konstruktor fest.
quelle
setMonth
.Die Sache ist, wenn Sie einen Tag zuerst einstellen, sind Sie immer noch im aktuellen Monat, also im September. Der September hat nur 30 Tage, also:
quelle
Es ist, weil das erste, was Sie tun, ist
Hiermit wird das aktuelle Datum auf 31 festgelegt. Der aktuelle Monat ist der September mit 30 Tagen.
Wenn Sie das Datum nach diesem Zeitpunkt ausdrucken würden, würde dies den 1. Oktober bedeuten.
quelle
Angenommen, Sie möchten Jahr, Monat und Datum gleichzeitig festlegen, können Sie den Konstruktor für das längere Datum verwenden :
Sie würden also schreiben:
Wie bereits festgelegt, kann das Festlegen eines Datumsabschnitts zu Überläufen führen:
Darüber hinaus kann das Festlegen eines Monats vor dem Datum immer noch zu einem unerwarteten Überlauf führen (Antworten, die eine Änderung der Reihenfolge der Methoden empfehlen, sind falsch):
quelle
Das Warum des Verhaltens und wie man es vermeidet, wurde ausführlich erklärt.
Der eigentliche Fehler in Ihrem Code ist jedoch, dass Sie nicht den Standardkonstruktor verwenden sollten: new Date (). Ihr Code führt zu einem Datum am 13. Dezember mit der aktuellen Uhrzeit. Ich bezweifle, dass du das willst. Sie sollten den Datumskonstruktor verwenden, der Jahr, Monat und Tag als Parameter verwendet.
quelle
Die Antworten machten deutlich, dass die richtige Reihenfolge für die Einstellung des Datums lautet:
Ich möchte nur darauf hinweisen, dass es wegen des 29. Februar in Leapyears auch wichtig ist, das Jahr zuerst festzulegen.
quelle
Übergeben Sie den Wert als Ganzzahl, nicht als Zeichenfolge. Es wird ein korrekter Wert zurückgegeben.
Update - obige Beschreibung ist nicht korrekt. Das Hauptproblem war, dass Sie diese drei Zeilen in die richtige Reihenfolge bringen mussten. Selbst nachdem ich die Reihenfolge korrigiert hatte, vergaß ich, die Beschreibung zu korrigieren
quelle