javascript .setDate()错误的日期输出

时间:2015-09-16 08:24:50

标签: javascript date

我试图在开始日期和偏移量(数字+单位)的范围内获取新日期,但.setDate行为不正确,下面代码中的t.start和t.end都是正确的ISOStrings(已创建)使用javascript函数.toISOString()):

while(t.start < t.end) {
        console.log(t.start);
        t.start = new Date(t.start);
        console.log("original toDate "+t.start);
        //calculate the new start
        switch(unit) {
            case "giorno":
                console.log("adding days: " + n + " to " + t.start.getDate());
                t.start.setDate(t.start.getDate() + n);
                break;
            case "settimana":
                t.start.setDate(t.start.getDate() + n*7);
                break;
            case "mese":
                t.start = addMonths(t.start, n);
                break;
            case "anno":
                t.start.setFullYear(t.start.getFullYear() + n);
                break;
        }
        console.log("Post add: "+t.start);
        t.start  = t.start.toISOString();
    }

&#34; giorno&#34;,&#34; settimana&#34;,&#34; mese&#34;,&#34; anno&#34;是&#34; day&#34;,&#34; week&#34;,&#34; month&#34;,&#34; year&#34;你可以从代码中猜出来。 在2015-09-11T00:00:00.000Z上运行此代码,n = 1,unit =&#34; giorno&#34;和t.end = 2015-09-13T00:00:00.000Z返回此输出:

2015-09-11T00:00:00.000Z
original toDate Fri Sep 11 2015 02:00:00 GMT+0200 (W. Europe Summer Time)
adding days: 1 to 11
Post add: Sun Dec 20 2015 02:00:00 GMT+0100 (W. Europe Standard Time)

前3个console.log()是我所期待的。 最后一个应该是2015年9月12日星期六...我无法理解为什么它不是(我也尝试用moment.js将所有内容转换成片刻,同样的错误)

1 个答案:

答案 0 :(得分:3)

当我将此代码放在while循环之前时,它按预期工作:

t={}
t.start="2015-09-11T00:00:00.000Z"
t.end="2015-09-13T00:00:00.000Z"
unit="giorno"
n=1

然而,当我用

替换最后一行时
n="1"

我得到的结果与你相同。

由于

console.log("1" + 11)

给出111,您似乎将日期设置为9月初(即12月20日)后的111天。

也许您需要在顶部附近使用n=parseInt(n),以便添加数字而不是字符串?