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]元素返回选定日期的格式,这就是为什么我要弄清楚这一点。
-
看起来GMT抵消了我
-
你能解释为什么你甚至期望new Date('4,5,1979')以任何特定的方式行事吗? 字符串'4,5,1979'甚至没有格式化为日期(不管是我认识的格式)。
-
这就是我的想法。 这是设计的吗? 为什么只在使用dateString参数时才使用偏移量?
-
new Date(yyyy,mm,dd);
-
@NPE - 抱歉,年/月/日的例子有误。 我更新了它。
-
developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
@joshb:您能否更新小提琴以反映您的问题?
-
@NPE:小提琴更新
看起来格式'1979-04-05'被解释为UTC日期(然后在显示时将UTC日期转换为本地时间)。 表单new Date(1979,3,5);被解释为本地时间。 您可以使用Date.UTC强制使用3参数表单的UTC时间(请参阅文档)。
Date解析(特别是时区处理)在浏览器中通常不一致,最好不要依赖它 - 尽可能使用UTC,或使用单独的库,如Date.js或moment.js。