2015-01-14 10 views
5

durchlaufen Ich versuche, eine Liste der Zeichenfolge Daten in Monaten (dh ["Oktober 2014", "Nov 2014", ... "Jan 2015"])) mit dem Code zu generieren hier:Wie durch Monate in Javascript

var resultList = []; 
var date = new Date("October 13, 2014"); 
var endDate = new Date("January 13, 2015"); 
var monthNameList = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 

while (date <= endDate) 
{ 
    var stringDate = monthNameList[date.getMonth()] + " " + date.getFullYear(); 
    resultList.push(stringDate); 
    date.setDate(date.getMonth() + 1); 
} 

return resultList; 

Aber wenn ich den Code ausführen, wurde der Bildschirm eingefroren (wie es Endlosschleife oder so etwas). Ich habe dieses Problem nie, wenn ich tägliches Datum (date.getDate() +1) erzeuge. Fehle ich hier etwas?

Antwort

6

Das Problem ist in Ihrem date.setDate(date.getMonth() + 1) Code wie die MDN-Dokumentation wird die setDate Funktion setzt den Tage an die angegebene Date Objekt. Daher verhält es sich nicht so, wie Sie es beabsichtigt haben.

Um das Problem besser zu veranschaulichen, wird die Variable date als Mon Oct 13 2014 00:00:00 GMT-0400 (Eastern Daylight Time) initialisiert. Wenn Sie date.getMonth() anrufen, gibt es 9 zurück, die den 10. Monat im Kalenderjahr anzeigt; Wenn also der Wert um 1 erhöht wird, wird der Tag der date Variablen auf gesetzt.

Auf der nächsten Iteration der Monate nicht geändert hat, so dass der Code erneut ausführt date.getMonth() die 9 wieder zurückkehrt, so weiter und so weiter. Dieses unerwartete Verhalten wiederholt sich endlos, da die while Bedingung nie erfüllt ist.

Der Code sollte aktualisiert werden, um stattdessen setMonth zu verwenden.

+0

Danke! setMonth() löst mein Problem. Sehr klare Erklärung. – BoVut

+0

Sie sind herzlich willkommen! –

5

Verwenden Sie setMonth() anstelle von setDate(), um den Monat der Datumsvariablen festzulegen.

date.setMonth(date.getMonth() + 1); 
0

Ermöglicht es zu tun mit Moment:

moment(sd).add(1,'month').format("MMM-YY") 

enter image description here

Sie einen Unterschied zwischen zwei Daten finden

moment("08-31-2017").diff(moment("01-31-2017"), 'months', true) 

enter image description here