5

我注意到时区和 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 日的对象。每次尝试获取Date当天 00:00 到 01:00 之间的日期都会导致前一天的日期介于晚上 11:00 到 00:00 之间。

(Windows 用户可以将他们的时区更改为巴西利亚/GMT-03 以体验相同的行为)

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

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

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

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

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

4

1 回答 1

0

这是绝对正确的行为。由于 DST 午夜在巴西当地时间 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));.

于 2012-10-03T09:37:30.717 回答