axios时区问题

问题描述

项目中,将获取到的当前时间传回后端存储,再从后端获取传回前端显示时,发现少了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大法好!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容