Javascript 为什么在新日期的YYYY-MM-DD字符串中添加空格会更改日期?

Javascript 为什么在新日期的YYYY-MM-DD字符串中添加空格会更改日期?,javascript,Javascript,例如: new Date('2020-01-04').getTime() // 1578096000000 new Date('2020-01-04 ').getTime() // 1578124800000 奇怪的是,新日期('2020-01-04')提供了我想要的日期。此行为取决于实现 2020-01-04是有效的日期字符串。在规范中可以看到日期字符串的有效格式。示例: YYYY-MM-DDTHH:mm:ss.sssZ YYYY YYYY-MM YYYY-MM-DD THH:mm THH:

例如:

new Date('2020-01-04').getTime() // 1578096000000
new Date('2020-01-04 ').getTime() // 1578124800000

奇怪的是,
新日期('2020-01-04')
提供了我想要的日期。

此行为取决于实现

2020-01-04
是有效的日期字符串。在规范中可以看到日期字符串的有效格式。示例:

YYYY-MM-DDTHH:mm:ss.sssZ
YYYY
YYYY-MM
YYYY-MM-DD
THH:mm
THH:mm:ss
THH:mm:ss.sss
就是那些角色,没有别的。尾随空格表示规范不认为该格式有效,在这种情况下:

函数首先尝试根据日期-时间字符串格式(20.4.1.15)中描述的格式解析字符串,包括扩展的年份如果字符串不符合该格式,函数可能会退回到任何特定于实现的启发式或特定于实现的日期格式。


因此,如果字符串与所需格式不完全匹配,则由浏览器或环境来解析字符串。根据规范,不需要关于环境如何解析非标准字符串的行为;这是未定义的行为。

似乎你给了它空间,它将其作为“2020-01-04 00:00”,而不是2020-01-04的标准时间。检查以下测试。它只在chrome上有效,在firefox上它会给出无效的日期------NaN

var d=新日期(“2020-01-04”);
document.getElementById(“demo1”).innerHTML=d+“----”+d.getTime();
var d1=新日期(“2020-01-04”);
document.getElementById(“demo2”).innerHTML=d1+“----”+d1.getTime();
var d2=新日期(“2020-01-04 00:00”);
document.getElementById(“demo3”).innerHTML=d2+“----”+d2.getTime();
var d3=新日期(“2020-01-04 13:00”);
document.getElementById(“demo4”).innerHTML=d3+“----”+d3.getTime()


因为Chrome的解析器非常适合您,并将该空间视为时间戳中小时的开始部分。如果没有它,它会将其视为UTC日期午夜,然后应用时区的任何偏移量。对于小时部分,它将忽略时区,但在Firefox中它将返回NaN,因此如果它真的是您想要的结果,请明确并传递剩余的
00:00:00
@kaido真棒的答案