在JavaScript中添加一周到星期:舍入错误或夏令时?

时间:2011-02-22 04:32:25

标签: javascript date rounding dst

我正在尝试向Data对象添加七天,但是在某个阶段我开始得到奇怪的结果。

var currDate = new Date(2011, 2, 28)
  , oldTicks = currDate.getTime()
  , newTicks = oldTicks + (86400000 * 7)
  , nextWeek = new Date(newTicks)
console.log('Old ticks: ' + oldTicks)
console.log('New ticks: ' + newTicks)
console.log('New date : ' + nextWeek)

我得到的输出,Chrome / FF都是:

Old ticks: 1301230800000
New ticks: 1301835600000
log: New date : Sun Apr 03 2011 23:00:00 GMT+1000 (EST)

预计得到:

log: New date : Mon Apr 04 2011 23:00:00 GMT+1000 (EST)

正如您所看到的,不是添加7天,而是添加了6天。但是,上述代码适用于其他日期,例如2011年4月28日或2011年5月28日。

2 个答案:

答案 0 :(得分:5)

Crescent Fresh是我能推断的正确形式。 查找时区GMT+1000 (EST)看起来像澳大利亚东部标准时间 - 来自wikipedia - list of timezones by UTC offset

wikipedia - daylist savings time around the world开始,表明澳大利亚在标准日期范围之间从标准时间切换到夏令时。

答案 1 :(得分:1)

如果是我,我会这样做:

var curDate = new Date(),

var aWeekLater = new Date(curDate.getFullYear(), curDate.getMonth(), curDate.getDate() + 7);

对一天中的时间进行一些可能的调整。

也就是说,当我在Chrome开发者控制台中尝试使用您的代码时,我会将4月4日作为答案。