JSON Stringify 由于 UTC 而更改了日期时间

2022-08-30 04:54:34

我在 JavaScript 中的 date 对象始终由 UTC +2 表示,因为我所在的位置。因此,就像这样

Mon Sep 28 10:00:00 UTC+0200 2009

问题是将上述日期转换为JSON.stringify

2009-09-28T08:00:00Z  (notice 2 hours missing i.e. 8 instead of 10)

我需要的是日期和时间得到尊重,但它不是,因此它应该是

2009-09-28T10:00:00Z  (this is how it should be)

基本上我用这个:

var jsonData = JSON.stringify(jsonObject);

我尝试传递一个替换器参数(stringify上的第二个参数),但问题是该值已被处理。

我也尝试过使用和日期对象,但这些也没有给我我想要的东西。toString()toUTCString()

任何人都可以帮我吗?


答案 1

最近我遇到了同样的问题。并使用以下代码解决了它:

x = new Date();
let hoursDiff = x.getHours() - x.getTimezoneOffset() / 60;
let minutesDiff = (x.getHours() - x.getTimezoneOffset()) % 60;
x.setHours(hoursDiff);
x.setMinutes(minutesDiff);

答案 2

JSON使用不表示本地时间的函数 - 它以未修改的UTC表示时间 - 如果您查看日期输出,您可以看到您处于UTC + 2小时,这就是为什么JSON字符串更改两个小时的原因,但如果这允许相同的时间在多个时区中正确表示。Date.prototype.toISOString