使用javascript的新日期(字符串)的不同行为

时间:2017-06-30 23:51:15

标签: javascript date

在格式为yyyy-MM-ddTHH的字符串上有日期:mm:ss

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

awk 'BEGIN{FS=OFS="\t"} $2~/gene analysis, common variant$/' file

,创建的对象是

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

这就是我对桌面上Chrome(v 59.0.3071.115)的期望和发生的情况。

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

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

正如您所看到的,由于我当地的时区,小时数不同。

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

修改

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

编辑2

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

编辑3

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

1 个答案:

答案 0 :(得分:0)

ECMAScript 5.1 spec中存在错误。

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

previous specs上(ECMAScript 5.1):

  

Z是时区偏移,指定为“Z”(对于UTC)或“+”或“ - ”后跟时间表达式HH:mm

     

[...]

     

缺席时区偏移的值为“Z”。

current specs(已修复):

  

如果不存在时区偏移,则仅日期表单将被解释为UTC时间,而日期时间表单将被解释为本地时间。