如何在 Javascript 中循环几个月
How to loop through months in Javascript
我正在尝试生成以月为单位的字符串日期列表
(即 ["Oct 2014"、"Nov 2014"、..."Jan 2015"])
使用此处的代码:
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 )时,我从来没有遇到过这个问题。
我在这里遗漏了什么吗?
问题出在您的 date.setDate(date.getMonth() + 1)
代码中,因为 MDN 文档指出 setDate
函数将 day 设置为指定的 Date
对象.因此,它没有按照您的预期运行。
为了更好地说明问题,将date
变量初始化为Mon Oct 13 2014 00:00:00 GMT-0400 (Eastern Daylight Time)
。当你调用date.getMonth()
时,它returns 9
表示日历年的第10个月;因此将值增加 1 会导致将 date
变量的 day 设置为 10。
在下一次迭代中,月份没有改变,所以代码重新执行date.getMonth()
which returns 9
,等等等等。
由于永远不会满足 while
条件,这种意外行为会不断重复。
代码应更新为使用 setMonth
。
使用 setMonth()
而不是 setDate()
来设置日期变量的月份。
date.setMonth(date.getMonth() + 1);
让我们使用 Moment 来做到这一点:
moment(sd).add(1,'month').format("MMM-YY")
您可以找到两个日期之间的差异
moment("08-31-2017").diff(moment("01-31-2017"), 'months', true)
我正在尝试生成以月为单位的字符串日期列表 (即 ["Oct 2014"、"Nov 2014"、..."Jan 2015"]) 使用此处的代码:
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 )时,我从来没有遇到过这个问题。 我在这里遗漏了什么吗?
问题出在您的 date.setDate(date.getMonth() + 1)
代码中,因为 MDN 文档指出 setDate
函数将 day 设置为指定的 Date
对象.因此,它没有按照您的预期运行。
为了更好地说明问题,将date
变量初始化为Mon Oct 13 2014 00:00:00 GMT-0400 (Eastern Daylight Time)
。当你调用date.getMonth()
时,它returns 9
表示日历年的第10个月;因此将值增加 1 会导致将 date
变量的 day 设置为 10。
在下一次迭代中,月份没有改变,所以代码重新执行date.getMonth()
which returns 9
,等等等等。
由于永远不会满足 while
条件,这种意外行为会不断重复。
代码应更新为使用 setMonth
。
使用 setMonth()
而不是 setDate()
来设置日期变量的月份。
date.setMonth(date.getMonth() + 1);
让我们使用 Moment 来做到这一点:
moment(sd).add(1,'month').format("MMM-YY")
您可以找到两个日期之间的差异
moment("08-31-2017").diff(moment("01-31-2017"), 'months', true)