我注意到时区和JavascriptDate
对象有些奇怪。
在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到00:00之间。
(Windows用户可能会将时区更改为巴西利亚/GMT-03,以体验相同的行为)
将一小时(或一天)添加到这样的日期对象会导致返回相同的日期。
我想这与巴西特定日期的夏令时有关,但我绝对不知道如何处理。
我有一个循环,它在一个月的几天内迭代(对于日历应用程序),在这种情况下,当到达2012年10月20日时,它显然会永远循环。
我一定做错了什么,但我不知道如何处理这种情况,因为我想其他时区也可能发生这种情况。
在Javascript中处理Date
的建议方法是什么,以确保不会发生此类与时区/夏令时相关的问题?
这是一个绝对正确的行为。由于夏令时午夜根本不存在于巴西当地时间10月21日。如果你只需要构建一个日历,你可以使用new Date(2012, 9, 21, 0, 0, 0).toUTCString()
而不是new Date(2012, 9, 21, 0, 0, 0).toString()
和其他UTC方法。
例如,要创建UTC日期,可以使用new Date(Date.UTC(2012, 9, 21, 0, 0, 0));
。