Javascript日期循环错过2015年2月

时间:2014-05-08 11:15:12

标签: javascript datetime

我目前正在使用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/

任何帮助将不胜感激,谢谢。

2 个答案:

答案 0 :(得分:6)

这是因为如果您没有为setMonth指定日期参数,则会使用getDatesee 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开始,如下图所示

enter image description here

因此我们知道feb包含28或29天所以它的跳过feb,到那个月从月份的2开始,所以在第二种情况下它的打印feb

所以写下面的代码来回答: -

next = start.setMonth(start.getMonth() + 1, 1);