Safari正在将没有时区的ISO 8601日期时间字符串解析为UTC而不是Local

时间:2019-08-21 10:17:20

标签: javascript safari

根据this没有时区的日期时间字符串,应将其解释为本地时间。

  

如果没有时区偏移,则仅日期形式将被解释为UTC时间,而日期时间形式将被解释为本地时间。

我们的API返回不同时区的时间戳,但我们始终希望在不同的时区中显示它们(这些时间是飞行时间,总是显示在机场本地)。

在大多数浏览器中,我可以将此字符串传递给Date对象,并将其解释为用户的本地时区,但是我不在乎它是错误的时区,因为我们不比较各个时区的Date。当我使用Intl.DateTimeFormat.format将其显示为字符串时,它显示的时间与该字符串指定的时间相同。

在Safari中,这些时间字符串被解释为UTC,然后字符串格式将其转换为本地时间。

new Date("2020-05-06T13:25:00").getTime() === new Date("2020-05-06T13:25:00Z").getTime()

在Safari中返回true,但在其他所有位置返回false。 (如果您当地的时区是UTC,但我们不会考虑这种情况,它也会返回true。)

new Date in Safari

这是在设置为CDT的计算机上运行的Safari。以13:25作为世界标准时间,然后用-5个小时显示。

new Date in Chrome

这是Chrome(在Windows上-不确定是否相关,我无法使用Mac)。但是它使用与本地时间相同的时间戳,因此将其显示为相同时间。这就是我想要的。

无论如何,我们都可以解决此问题,以便我可以返回一个时间戳,然后将其解析为本地时间,以便其正确显示。

0 个答案:

没有答案