Safari 返回不正确的 Date toISOString() 值

Joh*_*rty 6 javascript safari firefox google-chrome mobile-safari

当我将日期字符串2019-02-16T10:00:00转换为 timezone 中的 JS Date 对象GMT+0100 (CET),然后调用.toISOString()我希望获得 ISO date/time 2019-12-01T09:10:10.000Z (-1 hours)

但是,我所看到的是:

Safari (不正确):

new Date('2019-12-01T10:10:10').toISOString()
\\ returns 2019-12-01T10:10:10.000Z
Run Code Online (Sandbox Code Playgroud)

(正确):

new Date('2019-12-01T10:10:10').toISOString()
\\ returns 2019-12-01T09:10:10.000Z
Run Code Online (Sandbox Code Playgroud)

火狐 (正确):

new Date('2019-12-01T10:10:10').toISOString()
\\ returns 2019-12-01T09:10:10.000Z
Run Code Online (Sandbox Code Playgroud)

我是否遗漏了什么,或者这是一个已知的 Safari 问题?

Joh*_*rty 15

我发现了问题。Safari 无法将格式中的日期字符串2019-12-01T10:10:10转换为Date对象而不会弄乱它。解决方案(找到here)是重新格式化2019/12/01 10:10:10所有浏览器都支持的格式。

// convert into YYYY/MM/DD HH:MM:SS
var dateString = '2019-12-01T10:10:10'.replace(/-/g, '/').replace('T', ' ');
Run Code Online (Sandbox Code Playgroud)

Safari (正确)

new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
Run Code Online (Sandbox Code Playgroud)

(正确)

new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
Run Code Online (Sandbox Code Playgroud)

火狐 (正确)

new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
Run Code Online (Sandbox Code Playgroud)

希望这可以为下一个沮丧的开发人员节省几个小时!