Safari returns Date toISOString() 的错误值
Safari returns incorrect value for Date toISOString()
当我将日期字符串 2019-02-16T10:00:00
转换为时区 GMT+0100 (CET)
中的 JS 日期对象,然后调用 .toISOString()
我希望获得 ISO date/time 2019-12-01T09:10:10.000Z
(-1 小时).
然而,我看到的是:
Safari (不正确):
new Date('2019-12-01T10:10:10').toISOString()
\ returns 2019-12-01T10:10:10.000Z
Chrome (正确):
new Date('2019-12-01T10:10:10').toISOString()
\ returns 2019-12-01T09:10:10.000Z
FireFox (正确):
new Date('2019-12-01T10:10:10').toISOString()
\ returns 2019-12-01T09:10:10.000Z
我是不是遗漏了什么,或者这是一个已知的 Safari 问题?
看起来 Safari 将提供的输入时间作为 UTC 时间,但 Chrome 和 Firefox 使用的是本地时区。我找不到任何支持这种行为的官方文件。但是您可以从浏览器轻松验证它。这是我在印度的产出 (GMT+530)
.
Chrome/FF:
new Date('2019-12-01T10:10:10Z').toISOString()
"2019-12-01T10:10:10.000Z"
new Date('2019-12-01T10:10:10').toISOString()
"2019-12-01T04:40:10.000Z"
Safari:
new Date('2019-12-01T10:10:10').toISOString()
"2019-12-01T10:10:10.000Z"
new Date('2019-12-01T10:10:10Z').toISOString()
"2019-12-01T10:10:10.000Z"
我发现了问题。 Safari 无法将 2019-12-01T10:10:10
格式的日期字符串转换为 Date
对象而不用搞砸它。解决方案 (found 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', ' ');
Safari(正确):
new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
Chrome (正确):
new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
FireFox(正确):
new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
希望这可以为下一个沮丧的开发人员节省几个小时!
当我将日期字符串 2019-02-16T10:00:00
转换为时区 GMT+0100 (CET)
中的 JS 日期对象,然后调用 .toISOString()
我希望获得 ISO date/time 2019-12-01T09:10:10.000Z
(-1 小时).
然而,我看到的是:
Safari (不正确):
new Date('2019-12-01T10:10:10').toISOString()
\ returns 2019-12-01T10:10:10.000Z
Chrome (正确):
new Date('2019-12-01T10:10:10').toISOString()
\ returns 2019-12-01T09:10:10.000Z
FireFox (正确):
new Date('2019-12-01T10:10:10').toISOString()
\ returns 2019-12-01T09:10:10.000Z
我是不是遗漏了什么,或者这是一个已知的 Safari 问题?
看起来 Safari 将提供的输入时间作为 UTC 时间,但 Chrome 和 Firefox 使用的是本地时区。我找不到任何支持这种行为的官方文件。但是您可以从浏览器轻松验证它。这是我在印度的产出 (GMT+530)
.
Chrome/FF:
new Date('2019-12-01T10:10:10Z').toISOString()
"2019-12-01T10:10:10.000Z"
new Date('2019-12-01T10:10:10').toISOString()
"2019-12-01T04:40:10.000Z"
Safari:
new Date('2019-12-01T10:10:10').toISOString()
"2019-12-01T10:10:10.000Z"
new Date('2019-12-01T10:10:10Z').toISOString()
"2019-12-01T10:10:10.000Z"
我发现了问题。 Safari 无法将 2019-12-01T10:10:10
格式的日期字符串转换为 Date
对象而不用搞砸它。解决方案 (found 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', ' ');
Safari(正确):
new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
Chrome (正确):
new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
FireFox(正确):
new Date(dateString).toISOString()
// returns 2019-12-01T09:10:10.000Z
希望这可以为下一个沮丧的开发人员节省几个小时!