为什么JS假设如果不加0,则字符串日期不带时间为UTC,如果不加0,则为本地?

时间:2018-11-29 15:33:54

标签: javascript java date localdate

这是一个奇怪的现象,但是我敢肯定有一个很好的解释。

我和我的团队最近发现,当使用 java的LocalDate 并将其以默认字符串格式“ YYYY-MM-DD” 发送回前端时,Javascript将自动假设该字符串为UTC,则创建一个日期,因此居住在ET区域,它将自动减去-5小时。

烦人,但我们明白了。

但是,当我们按时发回“ YYYY-MM-DDThh:mm:ss” 时,会将其解析为本地日期。好的,很奇怪...但是很奇怪。

现在奇怪的是,如果我们按日期发送没有0填充的字符串,那么“ YYYY-MM-D” 会将其解析为本地日期。 为什么?

这是一个例子:

  
new Date("2017-12-09")
// output: Fri Dec 08 2017 19:00:00 GMT-0500 (Eastern Standard Time)
new Date("2017-12-9")
// output: Sat Dec 09 2017 00:00:00 GMT-0500 (Eastern Standard Time)

这是为什么?

1 个答案:

答案 0 :(得分:4)

答案取决于您的浏览器实现。

请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

  

注意:由于浏览器的差异和不一致,强烈建议不要使用Date构造函数(和Date.parse,它们等效)来解析日期字符串。仅按照约定,对RFC 2822格式字符串的支持。对ISO 8601格式的支持有所不同,因为仅日期字符串(例如“ 1970-01-01”)被视为UTC,而不是本地。