我试图在几个月内生成一个字符串日期列表 (即[" 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)时,我从来没有遇到过这个问题。 我在这里错过了什么吗?
答案 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")
您可以找到两个日期之间的差异
moment("08-31-2017").diff(moment("01-31-2017"), 'months', true)