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

ere*_*eOn 5 javascript timezone date

我注意到时区和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)"
Run Code Online (Sandbox Code Playgroud)

我发现无法获得代表2012年10月21日的对象.每天尝试Date在00:00到01:00之间获得一个日期,从而产生前一天中午11:00到00:00之间的日期.

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

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

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

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

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

Date在Javascript 中处理的建议方法是什么,以确保不会出现与时区/夏令时相关的问题?

bjo*_*rnd 0

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

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