如何在Javascript中循环几个月

BoV*_*Vut 5 javascript date while-loop

我正在尝试使用以下代码生成几个月的字符串日期列表(即["2014年10月","2014年11月",..."2015年1月"]):

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;
Run Code Online (Sandbox Code Playgroud)

但是当我运行代码时,屏幕被冻结(就像它是无限循环或其他东西).当我生成每日日期(即date.getDate()+1)时,我从来没有遇到过这个问题.我在这里错过了什么吗?

fro*_*dqy 7

使用setMonth()而不是setDate()设置日期变量的月份.

date.setMonth(date.getMonth() + 1);
Run Code Online (Sandbox Code Playgroud)


Ant*_*ney 6

问题在您的date.setDate(date.getMonth() + 1)代码中,因为MDN文档声明setDate函数将日期设置为指定Date对象.因此,它不像你想象的那样表现.

为了更好地说明问题,将date变量初始化为Mon Oct 13 2014 00:00:00 GMT-0400 (Eastern Daylight Time).当你打电话给date.getMonth()它时,返回9指示日历年的第10个月; 因此将值递增1会导致将变量的日期设置date10.

在下一次迭代中,月份没有改变,因此代码重新执行再次date.getMonth()返回9,依此类推.这种意外行为继续无休止地重复,因为while条件永远不会得到满足.

应该更新代码以使用setMonth.