我试图在开始日期和偏移量(数字+单位)的范围内获取新日期,但.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将所有内容转换成片刻,同样的错误)
答案 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)
,以便添加数字而不是字符串?