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

本文介绍了在Vue前端与Django后端交互时遇到的日期时间格式错误问题,以及如何通过Moment.js调整时区偏移量来确保时间正确同步。通过设置utcOffset(480)将时间转换为北京时间,从而消除8小时的时区差异,确保数据入库与展示的一致性。此外,还提到在Django设置中可通过将USE_TZ设为false来直接使用本地时间。
摘要由CSDN通过智能技术生成

解决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 来设置为中国时间,不然存入数据库时间还是少个时差
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值