Javascript jquery查找从给定日期算起的前12个月的日期

Javascript jquery查找从给定日期算起的前12个月的日期,javascript,jquery,date,Javascript,Jquery,Date,在这里,在jquery中,我试图查找给定日期之前12个月的日期。但是,之前12个月的日期是错误的 > var now = new Date(); > var months = new Array( "January", "February", "March", "April", "May","June", "July", "August", "September", "October", "November", > "December"); > f

在这里,在jquery中,我试图查找给定日期之前12个月的日期。但是,之前12个月的日期是错误的

>     var now = new Date();
>     var months = new Array( "January", "February", "March", "April", "May","June", "July", "August", "September", "October", "November",
> "December");
>     for(var i=0; i<=11;i++){
>     var past = now.setMonth(now.getMonth() -i);
>     console.log(months[now.getMonth()]+' '+now.getFullYear());
>     }

当您在
now
上调用
setMonth
时,它会处理该日期,因此下次进入循环时,它不再是
now
的原始值,而是减去递增计数器

潜在的解决方案是将基于
now
的新日期对象存储在循环中,然后对其进行操作,将
now
单独留下

var now = new Date();
var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
for (var i = 0; i <= 11; i++) {
    var past = new Date(now); // @talemyn ;)
    past.setMonth(now.getMonth() - i);
    console.log(months[past.getMonth()] + ' ' + past.getFullYear());
}

你所要做的就是改变:

now.getMonth() - i
对此

now.getMonth() - 1
就这样。因为您现在在循环的每个迭代中修改
,所以只需减去一个月,而不是循环变量

请参见此处的工作示例:


还请注意,您的
pass
变量在这一点上没有任何作用,因此您的循环可以如下所示:

for(var i=0; i<=11;i++){
   now.setMonth(now.getMonth() - 1);
   console.log(months[now.getMonth()]+' '+now.getFullYear());
}

for(var i=0;我与我将要发布的解决方案最为相同,不同的是我使用了
var pass=new Date(now);
,因为创建
now
pass
之间的时间差可能导致不同的月份。下面的答案有帮助吗?
now.getMonth() - 1
for(var i=0; i<=11;i++){
   now.setMonth(now.getMonth() - 1);
   console.log(months[now.getMonth()]+' '+now.getFullYear());
}