3

I have the following code that creates the date object pointing to other date.

var date = new Date(1967, 9, 22)

result:

Sat Oct 21 1967 23:00:00 GMT-0300 (Hora oficial do Brasil)

Does anybody knows why this happen?

4

1 回答 1

2

我的猜测:今年 10 月 21 日是白昼变化日,就像 2012 年一样,所以时间从 00:00 直接更改为 01:00,因此当 Javascript 引擎在 00:00 获得 1967 年 9 月 22 日,这是一个“不可能”的日期,因此似乎用于获取现有日期的方法是删除时移(一小时):这样您就可以得到 1967, 9, 21 23:00,这就是您所读到的在屏幕上。

它尝试了我自己的(法国)夏令时:我选择了 3 月 31 日的最后一个日光变化。在 2h00 是 3h00。所以 2h30 是一个“不可能”的日期。当我输入 Chrome 时:

new Date(2013, 2, 31, 2, 30, 00)

我读 :

Sun Mar 31 2013 01:30:00 GMT+0100 (CET)

2h30 变成 1h30。

编辑:按照卡梅伦的想法,由于某些时间班次可能持续 1、2、小时或更长时间,并且可能在一个方向或另一个方向,因此在建立日期时获得一年中同一天的最安全方法是设置小时到 12。事实上,这应该是 javascript 的默认值。

详细信息:要完整了解此主题,您必须知道由于各种政治或能源相关原因,很少会从日历中删除一整天。因此,如果需要 100.000% 的可靠性,您必须测试 Date 对象的日/月是否与提供的日/月相同 (!!)。

于 2013-09-02T19:46:39.803 回答