我目前正在使用js Date函数进行分配 - docs
我注意到,当我在几个月中循环时,2015年2月似乎不见了。
我不完全确定原因,下面是我正在运行的代码:
function test(){
var current = new Date(Date.now())
, start = new Date(current.getFullYear(), current.getMonth() , 0)
, end = new Date();
end.setMonth(start.getMonth() + 24);
while(start < end){
var year = start.getFullYear()
, month = start.getMonth()
, next = "";
document.write(month + "<br />");
next = start.setMonth(start.getMonth() + 1);
start = new Date(next);
}
}
test();
这是我设置{j}的一个jsfiddle http://jsfiddle.net/4bGmH/
任何帮助将不胜感激,谢谢。
答案 0 :(得分:6)
这是因为如果您没有为setMonth
指定日期参数,则会使用getDate
(see the docs)中的值。你开始在你的小提琴中使用日期值30(由于在创建日期时使用&#34; 0&#34;值),所以你错过了较短的2月份。仅包括第二个二月,因为当您跳过第一个二月时,getDate
值设置为1。尝试:
next = start.setMonth(start.getMonth() + 1, 1);
// instead of
next = start.setMonth(start.getMonth() + 1);
或
, start = new Date(current.getFullYear(), current.getMonth() , 1)
// instead of
, start = new Date(current.getFullYear(), current.getMonth() , 0)
答案 1 :(得分:2)
它的发生是因为在你的情况下月份是从日期30开始,如下图所示
因此我们知道feb包含28或29天所以它的跳过feb,到那个月从月份的2开始,所以在第二种情况下它的打印feb
所以写下面的代码来回答: -
next = start.setMonth(start.getMonth() + 1, 1);