我注意到时区和 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 和 00:00。
(Windows 用户可以将他们的时区更改为巴西利亚/GMT-03 以体验相同的行为)
向此类日期对象添加一小时(或一天)会返回相同的日期。
我想这与巴西那个特定日期的夏令时有关,但我绝对不知道如何处理。
我有一个循环遍历一个月中的几天(对于日历应用程序),在到达 2012 年 10 月 20 日时,它显然会永远循环。
一定是我做错了什么,但我不知道如何处理这种情况,因为我猜它也可能发生在其他时区。
在 Javascript 中处理 Date
的推荐方法是什么,以确保不会发生此类与时区/夏令时相关的问题?
最佳答案
这是绝对正确的行为。由于巴西本地时间 10 月 21 日根本不存在 DST 午夜。如果您只需要构建一个日历,您可以使用 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));
。
关于javascript - 有没有办法在 Javascript `Date` 对象中表示 2012 年 10 月 21 日?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12705485/