Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中循环几个月_Javascript_Date_While Loop - Fatal编程技术网

如何在Javascript中循环几个月

如何在Javascript中循环几个月,javascript,date,while-loop,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",

我正在尝试生成一个以月为单位的字符串日期列表 (即【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;
var resultList=[];
var日期=新日期(“2014年10月13日”);
var endDate=新日期(“2015年1月13日”);
var monthNameList=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”];

而(date问题出在您的
date.setDate(date.getMonth()+1)
代码中,因为MDN文档说明,该函数将日期设置为指定的
date
对象。因此,它的行为与您的预期不符

为了更好地说明问题,调用
date.getMonth()时,
date
变量初始化为
Mon-Oct 13 2014 00:00:00 GMT-0400(东部夏令时)
它返回
9
表示日历年中的第10个月;因此将该值增加1会将
日期的日期设置为10

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

应更新代码以改为使用。

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

date.setMonth(date.getMonth() + 1);
让我们使用以下方法进行操作:

你可以发现两个日期之间的差异

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

谢谢!setMonth()解决了我的问题。解释得非常清楚。
moment("08-31-2017").diff(moment("01-31-2017"), 'months', true)