日期的构造函数在修剪和未修剪的字符串上的行为不同

时间:2019-03-26 20:32:34

标签: javascript date

我知道从字符串创建日期通常不是一个好主意,但这仍然引起了我的注意:在日期字符串之前或之后添加空格会影响创建的日期值。 >

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 docsnew Date(<string>)调用Date.parse以获取时间值。除此之外,文档似乎没有提供任何未修饰字符串发生情况的指针。

我真的被这个卡住了!为什么空间会影响时间?这是编程,而不是广义相对论!

控制台上面记录了运行柏林v8引擎(UTC + 1)的Chrome 73浏览器产生的位置

1 个答案:

答案 0 :(得分:2)

根据规范(第20.3.3.2段):

  

该函数首先尝试解析String的格式   根据日期中提到的规则(包括延长的年份)   时间字符串格式(20.3.1.16)。如果字符串不符合   格式化功能可能会退回到任何特定于实现的位置   启发式或特定于实现的日期格式。

因此,当添加空格时,该字符串不符合日期时间字符串格式,并且解析器将退回到特定于实现的算法。就像Bergi所说的那样,这考虑了当地时区。