问题描述
项目中,将获取到的当前时间传回后端存储,再从后端获取传回前端显示时,发现少了8小时。
问题排查
F12查看Network数据,发现提交时时间就变了。
时间减少了8小时
用axios提交时需要qs.stringify()序列化,qs默认的时间格式化为Date.prototype.toISOString,返回的是格林威治时间,比北京时间晚8小时,需要修改默认日期格式化方法。
在axios.js文件中增加代码如下
//一次性解决时区和日期格式问题
import moment from 'moment'
Date.prototype.toISOString = function () {
return moment(this).format("YYYY-MM-DD HH:mm:ss");
};
再次查看Network,时区及格式正常。
时区及格式正常
然而,前端获取到的时间依旧少8小时,去后端mongodb数据库中查看,发现存储的时间依然是UTC时间,崩溃!
数据库中存的是UTC时间
无奈,那就在前端获取到时间后重新处理一下。
table.forEach((item) => {
item.inspect_time = moment(item.inspect_time).format("YYYY-MM-DD HH:mm:ss");
});
问题解决。
问题解决
总结
moment大法好!