有没有办法在Javascript`Date`对象中表示2012年10月21日?

时间:2012-10-03 09:24:22

标签: javascript date timezone

我注意到时区和Javascript Date对象的奇怪之处。

在Linux机器上试试这个:

$ TZ='America/Sao_Paulo' js 
js> new Date(2012, 9, 21, 0, 0, 0).toString() 
"Sat Oct 20 2012 23:00:00 GMT-0300 (BRST)"

我发现无法获得代表2012年10月21日的对象。每天尝试在00:00到01:00之间获得Date会产生前一天11:00之间的日期PM和00:00。

(Windows用户可能会将他们的时区更改为Brasilia / GMT-03以体验相同的行为)

将一小时(或一天)添加到此类日期对象会导致返回同一日期

我想这与在巴西特定日期发生的夏令时有关,但我绝对不知道如何处理。

我有一个循环,在一个月的日子里(对于一个日历应用程序)进行迭代,并且在这种情况下,当它到达2012年10月20日时,它显然会永远循环。

肯定有一些我做错了,但我不知道如何处理这种情况,因为我猜它也可能发生在其他时区。

在Javascript中处理Date以确保不会发生此类时区/夏令时相关问题的推荐方法是什么?

1 个答案:

答案 0 :(得分:0)

这是绝对正确的行为。由于DST午夜根本不存在于10月21日在巴西当地时间。如果您只需要构建日历,则可以使用new Date(2012, 9, 21, 0, 0, 0).toUTCString()代替new Date(2012, 9, 21, 0, 0, 0).toString()和其他UTC methods

例如,要创建UTC日期,您可以使用new Date(Date.UTC(2012, 9, 21, 0, 0, 0));