我有一个日期对象,我需要在第一个日期对象后1周创建另一个日期对象。我已经有了一个实现,但是当它到达十月,十一月和十二月时,似乎存在javascript的错误。这有解决方法吗?请注意,Chrome,FF和IE中的行为是一致的。
// ************ TEST#1 ************
var startDate = new Date(2011,08,05); // set to Sept 5, 2011
alert('START DATE' + startDate);
var endDate = new Date();
endDate.setDate(startDate.getDate() + 7);
alert('END DATE' + endDate); // endDate is Sept 12 which is correct
// check that startDate's value is unchanged
alert('START DATE' + startDate);
// ************ TEST#2 ************
var startDate = new Date(2011,10,05); // set to Nov 5, 2011
alert('START DATE' + startDate);
var endDate = new Date();
endDate.setDate(startDate.getDate() + 7);
alert('END DATE' + endDate); // endDate is Sept 12, 2011 which is wrong
alert('START DATE' + startDate);
// ************ TEST#3 ************
// changed implementation but this won't work
var startDate = new Date(2011,10,05);
alert('START DATE' + startDate);
var endDate = startDate;
endDate.setDate(startDate.getDate() + 7);
alert('END DATE' + endDate); // endDate is correct but...
alert('START DATE' + startDate); // startDate's value has changed as well
答案 0 :(得分:3)
我认为您的错误可能是您今天正在设置endate
。
// ************ TEST#2 ************
var startDate = new Date(2011,10,05); // set to Nov 5, 2011
alert('START DATE' + startDate);
// edit
var endDate = new Date(startDate.getFullYear(),startDate.getMonth(),startDate.getDate() + 7);
// old var endDate = new Date();
// endDate.setDate(startDate.getDate() + 7);
alert('END DATE' + endDate); // endDate is Sept 12, 2011 which is wrong
alert('START DATE' + startDate);
答案 1 :(得分:2)
这不是错误。在这种情况下,Date
是一个对象,startDate
和endDate
都引用相同的Date
实例。因此,当您更改基础对象时,它通过两个引用
编辑
OP指定错误在测试#2
这仍然不是一个错误。这里的问题是setDate
只会改变一个月中的某一天。在此,您已执行startDate.getDate() + 7
startDate.getDate() === 5
,因此正确地将endDate
的日期部分调整为该月的第12个月。
答案 2 :(得分:1)
除了JaredPar之外,新的Date()将使用当前时间创建日期,如果您只调用.setDate(),则只会更改“day of month”。