淘先锋技术网

首页 1 2 3 4 5 6 7

最近,我遇到了一个关于JSON取回日期的问题。当我从后端收到JSON数据并解析为JavaScript对象时,我发现日期比实际日期要少一个小时。

json取回日期少一小时

经过仔细研究,我发现这是由于时区的问题。JSON日期是以UTC时间格式存储的。当JSON数据被转换为JavaScript对象时,JavaScript把UTC时间转换为本地时区时间。如果本地时区比UTC时间早一个小时,那么就会造成少了一个小时的情况。


// 后端返回的JSON数据
{
  "date": "2021-10-01T12:00:00Z"
}

// 前端解析JSON数据
const json = JSON.parse('{"date": "2021-10-01T12:00:00Z"}');
const date = new Date(json.date);

console.log(date); // Fri Oct 01 2021 13:00:00 GMT+0100 (British Summer Time)

要解决这个问题,可以使用JavaScript的getTimezoneOffset()方法获取本地时区与UTC时间之间的分钟差,然后手动调整日期。


// 后端返回的JSON数据
{
  "date": "2021-10-01T12:00:00Z"
}

// 前端解析JSON数据
const json = JSON.parse('{"date": "2021-10-01T12:00:00Z"}');
const date = new Date(json.date);

const timezoneOffset = date.getTimezoneOffset();
date.setMinutes(date.getMinutes() + timezoneOffset);

console.log(date); // Fri Oct 01 2021 12:00:00 GMT+0100 (British Summer Time)

在这种情况下,getTimezoneOffset()方法返回负数,因为本地时区比UTC时间晚。

总之,当从后端接收JSON数据时,请始终记住该数据是UTC时间,不要忘记根据本地时区调整日期。