getMonth in Javascript gibt letzten Monat

139

Ich verwende einen Datepicker, der ein Datum im Format Sun Jul 7 00:00:00 EDT 2013 angibt. Obwohl der Monat Juli sagt, gibt es mir den Vormonat, wenn ich einen getMonth mache.

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");
d1.getMonth());//gives 6 instead of 7

Was mache ich falsch?

Entwickler747
quelle
14
Ja ... es ist null indiziert .
Abgesandter
2
Verlieren Sie nicht Ihren Verstand mit Daten in Javascript. Verwenden Sie Moment.js, wenn Sie können
Valamas
6
Ich kann nicht glauben, wie real das ist
neaumusic
Moment.js kann dateDiffs nicht korrekt ausführen. Es ist in Ordnung, wenn Sie dateDiffs innerhalb desselben Monats durchführen, aber versuchen Sie es in zwei verschiedenen Monaten (z. B. 27-04-2018 und 24-05-2018), und es ist ein Tagesausflug.
Rozza
1
Warten Sie, bis Sie es versuchen getYear()! ;-)
James Poulose

Antworten:

264

Weil getmonth () bei 0 beginnt. Möglicherweise möchten d1.getMonth() + 1Sie erreichen, was Sie wollen.

Rahul Tripathi
quelle
193
Ich muss sagen, eine Monatsnummer Null indiziert zu haben, ist das Dümmste, was ich seit einiger Zeit gesehen habe. '
LarryBud
5
warum sollte jemand es 0 basierend wollen, wenn getDate 1-31 gibt?
Abhinav Gauniyal
6
Höchstwahrscheinlich müssen Sie das tun d1.getMonth() < 12 ? d1.getMonth() + 1 : 1- sonst wäre der 13. Dezember, nicht wahr?
Daniel Khan
7
@ DanielKhan Nein, weil der Dezember 11 wäre, also würde das Hinzufügen von 1 zu 12 führen. Die Funktion getMonth () sollte niemals einen Wert über 11 zurückgeben.
unenthusiasticuser
7
@ LarryBud, die Argumentation ist wahrscheinlich, dass im Gegensatz zu anderen Teilen des Datums (Tag des Monats, Jahr, Stunden, Minuten, Sekunden ...), die immer als Zahlen verwendet werden, der Monat häufig unter Verwendung von in Text umgewandelt wird ein Array von Namen, das natürlich auf 0 basiert. Dies war bereits in C-Standardbibliotheken der Fall, die über 40 Jahre alt sein müssen.
JCaron
19

getMonth()Funktion ist null indiziert. Du musst tund1.getMonth() + 1

Kürzlich habe ich die Bibliothek Moment.js verwendet und nie zurückgeschaut. Versuch es!

letiagoalves
quelle
10

Vorausgesetzt, Sie verwenden Ihre Variable

var d1 = new Date("Sun Jul 7 00:00:00 EDT 2013");

Monat erfordert eine +1, um genau zu sein, es beginnt bei 0 zu zählen

d1.getMonth() + 1 // month 

Im Gegensatz dazu ... benötigen diese Methoden KEIN Plus 1

d1.getSeconds()   // seconds 
d1.getMinutes()   // minutes 
d1.getDate()      // date    

Und beachte, dass es .getDate()NICHT ist.getDay()

d1.getDay()       // day of the week as a 

Hoffe das hilft

Ich vermute, dass diese Methoden aus historischen Gründen nicht konsistent sind

jasonleonhard
quelle