如何在Javascript中循环几个月

时间:2015-01-14 03:12:08

标签: javascript date while-loop

我试图在几个月内生成一个字符串日期列表 (即[" 2014年10月"," 2014年11月和#34;,..." 2015年1月和#34;]) 在这里使用代码:

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;

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

3 个答案:

答案 0 :(得分: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会导致将date变量的设置为 10

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

应更新代码以改为使用setMonth

答案 1 :(得分:6)

使用setMonth()代替setDate()来设置日期变量的月份。

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

答案 2 :(得分:0)

让我们使用Moment

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

enter image description here

您可以找到两个日期之间的差异

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

enter image description here