我知道从字符串创建日期通常不是一个好主意,但这仍然引起了我的注意:在日期字符串之前或之后添加空格会影响创建的日期值。 >
console.log([
new Date('2019-03'), // 2019-03-01T00:00:00.000Z
new Date('2019-03 '), // 2019-02-28T23:00:00.000Z
new Date(' 2019-03'), // 2019-02-28T23:00:00.000Z
new Date('2019-03-05'), // 2019-03-05T00:00:00.000Z
new Date('2019-03-05 '), // 2019-03-04T23:00:00.000Z
new Date('2019/04/16'), // 2019-04-15T22:00:00.000Z
new Date('2019/04/16 '), // 2019-04-15T22:00:00.000Z
]);
根据Date
docs,new Date(<string>)
调用Date.parse
以获取时间值。除此之外,文档似乎没有提供任何未修饰字符串发生情况的指针。
我真的被这个卡住了!为什么空间会影响时间?这是编程,而不是广义相对论!
控制台上面记录了运行柏林v8引擎(UTC + 1)的Chrome 73浏览器产生的位置
答案 0 :(得分:2)
根据规范(第20.3.3.2段):
该函数首先尝试解析String的格式 根据日期中提到的规则(包括延长的年份) 时间字符串格式(20.3.1.16)。如果字符串不符合 格式化功能可能会退回到任何特定于实现的位置 启发式或特定于实现的日期格式。
因此,当添加空格时,该字符串不符合日期时间字符串格式,并且解析器将退回到特定于实现的算法。就像Bergi所说的那样,这考虑了当地时区。