关于javascript:创建新日期对象时的不一致

Inconsistencies when creating new date objects

我在javascript中创建新的日期对象,并根据我是否使用dateString参数与年/月/日整数参数来查看一些不一致。

这是一个例子:

1
2
var dt1 = new Date(1979,3,5);
var dt2 = new Date('1979-04-05');

jsFiddle with example

dt1被赋值:Thu Apr 05 1979 00:00:00 GMT-0500(Central Daylight Time)

dt2被赋值:Wed Apr 04 1979 19:00:00 GMT-0500(Central Daylight Time)

有人可以解释这种行为吗? 第二个例子(dt2)恰好是Chrome从输入[type = date]元素返回选定日期的格式,这就是为什么我要弄清楚这一点。


看起来格式'1979-04-05'被解释为UTC日期(然后在显示时将UTC日期转换为本地时间)。 表单new Date(1979,3,5);被解释为本地时间。 您可以使用Date.UTC强制使用3参数表单的UTC时间(请参阅文档)。

Date解析(特别是时区处理)在浏览器中通常不一致,最好不要依赖它 - 尽可能使用UTC,或使用单独的库,如Date.js或moment.js。