解决vue 提交日期格式数据,时间出现时区差的问题

一、错误源:

在自定义create_time ,进行前端vue 向后端django 传入数据时,发现
{'create_time': [ErrorDetail(string='日期时间格式错误。请从这些格式中选择:YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z]。', code='invalid')]}
此错误是由于 没有用data格式

二、过程

const d = new Date()
但在用完之后却在后端发现,前端console.log()为中国时间,并且时间当前正确的时间。
不过再次看数据发现差了8小时,于是换了一种写法使用了moment

三、解决

3.1

Moment格式化时间默认格式为当地时区的时间。

如果格式化的结果与当地时间有差值,一般原因是:要格式化的时间带有时间标志,如:UTCGMT等。
经过Moment格式化后,会变成时间标志所表示的时区的时间。

此时,只需要改变时间偏移量即可。使用utcOffset()

3.2

例如,要格式的时间中带有GMT标志(GMT是零时区),要格式化为北京时间

import moment from 'moment'
//获取当前时间  此时间其他位置也需要使用
const dtime = new Date()
						//定义个变量对处理过的时间寄存
						const deposit = handleDatetime(dtime)
//真正使用的东西
Moment(dtime).utcOffset(480).format('YYYY-MM-DD HH:mm:ss');

北京时间东八区时间,比零时区早8个小时(480分钟),所以应该加上480分钟

这样最后存入数据库的时间就与django显示的一致。

四、扩展

在django的Setting base文件,通过将USE_TZ 为false 来设置为中国时间,不然存入数据库时间还是少个时差
在这里插入图片描述

Logo

前往低代码交流专区

更多推荐