最近,我遇到了一个关于JSON取回日期的问题。当我从后端收到JSON数据并解析为JavaScript对象时,我发现日期比实际日期要少一个小时。
经过仔细研究,我发现这是由于时区的问题。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时间,不要忘记根据本地时区调整日期。