【发布时间】:2015-09-16 08:24:50
【问题描述】:
我正在尝试从开始日期和偏移量(数字 + 单位)的范围内获取新日期,但是 .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();
}
“giorno”、“settimana”、“mese”、“anno”是意大利对应的“day”、“week”、“month”、“year”,你可以从代码中猜到。 在 n=1、unit="giorno" 和 t.end = 2015-09-13T00:00:00.000Z 的 2015-09-11T00: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() 是我所期望的。 最后一个应该是 Sat Sep 12 2015... 我不明白为什么不是(我也尝试使用 moment.js 将所有内容转换为时刻,同样的错误)
【问题讨论】:
-
这可能是一个选项,但我真的很想知道为什么这不起作用。我认为它应该在没有外部资源的情况下是可行的(我尝试了 moment.js 只是因为它已经加载,因为此代码与 FullCalendar.js 一起使用)
-
它在 jsfiddle 中工作:jsfiddle.net/tumh6wtt
标签: javascript date