javascript的新Date(string)的不同行为



A 在字符串上有一个日期,格式为 yyyy-MM-ddTHH:mm:ss

我需要创建一个javascript Date对象,所以我这样做

var d = new Date('2017-07-01T00:38:00')

并且创建的对象是

Sat Jul 01 2017 00:38:00 GMT+0100 (GMT Daylight Time)

这就是我所期望的,也是我的桌面上的Chrome(v 59.0.3071.115(上发生的事情。

当我在Android手机上运行相同的代码时,使用Chrome版本51.0.2704.81时,结果是

Sat Jul 01 2017 01:38:00 GMT+0100 (GMT Daylight Time)

如您所见,由于我的本地时区,小时是不同的。

上述任何行为都是预期的吗?是铬版本的问题吗?在我的搜索中,我了解到带有字符串日期的 Date 构造函数会产生意外的结果,但我可以独立于浏览器依赖常量行为吗?


编辑

这不是重复的,因为在 Firefox 上我的结果与 Chrome v59 相同,日期时间被解释为本地日期而不是 UTC(这就是我想要的(。

编辑 2

在"据称"重复的问题上,"提问者"的目标是new Date()将插入的日期视为UTC,并对用户的本地时间进行必要的转换。 我想要的是new Date()将插入的日期处理为本地日期而不进行任何转换。这是我在最近的浏览器(Chrome,Firefox(上得到的行为,但在旧版本的Chrome(Android,v51(上没有。 因此,如果用户位于偏移量为 +01:00 的时区,如果我new Date('2017-07-01T00:38:00')则结果应该是Sat Jul 01 2017 00:38:00 GMT+0100

编辑 3

刚刚检查了如果我使用构造函数new Date(2017,06,01,0,38,0)日期被解释为 localdate(它在两个版本的 chrome 上都显示Sat Jul 01 2017 00:38:00 GMT+0100 (GMT Daylight Time)......是否有任何我可以依赖的文档来确保始终解释为本地日期?

ECMAScript 5.1 规范中有一个错误。

Chrome实现了规范字面上所说的内容,并将 Chrome 35 中Date的行为替换为您应该期望的行为。


在之前的规范(ECMAScript 5.1(上:

Z是指定为"Z"(表示 UTC(或"+"或"-"后跟时间表达式 HH:mm 的时区偏移

量[...]

缺少时区偏移量的值为"Z"。

在当前规格(已修复(上:

当时区偏移量不存在时,仅日期表单被解释为 UTC 时间,日期时间形式被解释为本地时间。

最新更新