【发布时间】:2019-11-28 15:07:26
【问题描述】:
我遇到的问题是 Chrome 和 IE/Edge 将某些 JavaScript 日期时间序列化为 JSON 给出了不同的结果 - 例如 1945 年夏天在英国。
我有一个 JavaScript 对象,其中包含通过日历组件设置的 Date 类型,该组件将时间设置为当地时间午夜。此对象通过 JSON.stringify 序列化,后者又使用 Date.toJSON,后者又使用 Date.toISOString。
如果我的英国语言环境中有一个本地日期时间,比如 1977 年 5 月 1 日,则序列化为 "1977-04-30T23:00:00.000Z",即 UTC 时间 1977 年 4 月 30 日晚上 11 点。这个很好,但是如果我从本地 1945 年 5 月 1 日开始,我最终会使用 Chrome 与 IE/Edge 得到不同的结果。 Chrome 正确地给了我 “1945-04-30T22:00:00.000Z”。这是晚上 10 点而不是 11 点的原因是因为英国在二战期间实行双倍夏令时。
IE/Edge 但是减去一小时,这意味着 JSON UTC 日期时间字符串是一小时。
这对我来说意味着我不能信任传回服务器的 JSON 序列化数据,除非我知道它来自哪个浏览器。
我正在考虑覆盖 Data.prototype.toJSON 以将序列化更改为基于本地时间的内容,但包括时区偏移量,例如“1945-05-01T00:00:00.000+0200”。至少那时我知道用户的实际意图。然而,这似乎有点极端,想知道我是否遗漏了什么。 JSON.stringify 是序列化数据以发送到服务器的常用方法,但整个机制似乎存在缺陷。
【问题讨论】:
标签: javascript json datetime timezone utc