Safari返回日期Toisostring()的不正确值



当我将日期字符串2019-02-16T10:00:00转换为时区GMT+0100 (CET)中的JS日期对象时,然后致电.toISOString(),我希望获得ISO日期/时间 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无法在不拧紧的情况下将2019-12-01T10:10:10格式的日期字符串转换为Date对象。解决方案(此处找到)是将所有浏览器支持的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

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

看起来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"

相关内容

  • 没有找到相关文章

最新更新