1

尝试这个:

date = new Date(2012,9,20)
Sat Oct 20 2012 00:00:00 GMT-0300 (BRT)
new Date(date.getFullYear(), date.getMonth(), date.getDate()+1)
Sat Oct 20 2012 23:00:00 GMT-0300 (BRT)

(在 Chrome 和 Firebug 上测试)

但这有效:

date = new Date(2012,10,20)
Sat Nov 20 2012 00:00:00 GMT-0300 (BRT)
new Date(date.getFullYear(), date.getMonth(), date.getDate()+1)
Sat Nov 21 2012 0:00:00 GMT-0300 (BRT)
4

3 回答 3

5

问题是巴西从 10 月 20 日开始实行夏令时 ( BRT )。尝试使用 UTC 时间:

date= new Date(Date.UTC(2012,9,20)); // zero-based month: 9->october
new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()+1))

这应该使您的日期提前独立于夏令时,让您的过渡顺利进行。有关更多信息,请参阅Javascript 日期:处理夏令时的最佳方法是什么?

或者,您可以将日期的时间设置为一天中的某个时间,例如中午,如果您真正关心的是这一天。

date = new Date(2012,9,20,12)
new Date(date.getFullYear(), date.getMonth(), date.getDate()+1)
于 2012-12-04T13:52:45.733 回答
1

这是夏令时:此时在 GMT-0300 时间倒退 1 小时。您的示例在 GMT+0400 时区运行良好。

请参阅问题1º Day of Daylight Saving Time Java 和 JS 显示不同的行为

于 2012-12-04T13:51:28.380 回答
0

它工作得很好:

console.log(date = new Date(2012,9,20))
console.log(new Date(date.getFullYear(), date.getMonth(), date.getDate()+1))
// returns:
// Sat Oct 20 2012 00:00:00 GMT+0200 (West-Europa (zomertijd))
// Sun Oct 21 2012 00:00:00 GMT+0200 (West-Europa (zomertijd))

(不要介意末尾的本地化字符串)

显然,您刚刚在本地化中开始了夏令时。请尝试Date.UTC(),除非您特别需要时间进行本地化。

于 2012-12-04T13:48:11.623 回答