vue开发,页面上Element的日期选择器选择的日期,使用axios提交到服务器端。
选择时间提交后,发现后台获取的时间少了8个小时,如只有日期的会少一天,比如你选择的是 2025-12-10,服务器接收到的是2025-12-09。
这是因为用axios提交时需要qs.stringify()序列化,
qs默认的时间格式化为Date.prototype.toISOString;
返回的是格林威治时间比北京时间晚8小时
解决办法:
在vue工程的package.json文件引入moment包
"moment": "^2.30.1"
在main.js里面添加代码
// 解决时区和日期格式问题
import moment from 'moment'
Date.prototype.toISOString = function(){
return moment(this).format('YYYY-MM-DD HH:mm:ss')
//或者选择带时区的格式 YYYY-MM-DDTHH:mm:ss.SSS[Z]
//return moment(this).format("YYYY-MM-DDTHH:mm:ss.SSS[Z]");
}
如果你不想全局处理,也可以这样:
axios.defaults.transformRequest.unshift((params) => {
if (params) {
Object.keys(params).forEach((key) => {
if (params[key] instanceof moment) {
params[key] = params[key].format('YYYY-MM-DDTHH:mm:ss.SSS\\Z')
}
})
}
return params
})
完