我注意到时区和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
以确保不会发生此类时区/夏令时相关问题的推荐方法是什么?
答案 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));
。