如何在Javascript中循环几个月
Posted
技术标签:
【中文标题】如何在Javascript中循环几个月【英文标题】:How to loop through months in Javascript 【发布时间】:2015-03-12 04:24:30 【问题描述】:我正在尝试生成以月为单位的字符串日期列表 (即[“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;
但是当我运行代码时,屏幕被冻结(就像它是无限循环之类的)。 当我生成每日日期(即 date.getDate() +1 )时,我从来没有遇到过这个问题。 我在这里遗漏了什么吗?
【问题讨论】:
【参考方案1】:让我们用Moment 来做吧:
moment(sd).add(1,'month').format("MMM-YY")
你可以找到两个日期之间的差异
moment("08-31-2017").diff(moment("01-31-2017"), 'months', true)
【讨论】:
【参考方案2】:问题出在您的 date.setDate(date.getMonth() + 1)
代码中,因为 MDN 文档指出 setDate
函数将 day 设置为指定的 Date
对象。因此,它的行为不符合您的预期。
为了更好地说明问题,date
变量被初始化为Mon Oct 13 2014 00:00:00 GMT-0400 (Eastern Daylight Time)
。当您调用date.getMonth()
时,它返回9
,表示日历年的第10 个月;因此,将值增加 1 会导致将 date
变量的 day 设置为 10。
在下一次迭代中,月份没有改变,所以代码重新执行date.getMonth()
,它再次返回9
,以此类推。
由于永远不会满足 while
条件,因此这种意外行为会不断重复。
代码应更新为使用setMonth
。
【讨论】:
谢谢! setMonth() 解决了我的问题。很清楚的解释。【参考方案3】:使用setMonth()
而不是setDate()
来设置日期变量的月份。
date.setMonth(date.getMonth() + 1);
【讨论】:
以上是关于如何在Javascript中循环几个月的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Nightwatch 测试的自定义命令中添加嵌套函数 javascript - forEach - 循环遍历元素