mongoDB导致时间相差8小时的解决方法

结论:放弃mongodb数据库本身的date类型,使用number类型替代。(一会说为什么)

 

在开发过程中,特别的是数据库的创建中,我们希望可以确定每个字段或是变量的类型,方便我们查询和计算。

但是mongodb的date类型对我们东八区却不是很友好。在我们存入时间的时候给我们减少8个小时,在我们获取时间的时候给我们加上8的小时。

 

目前网上有几种方法:

1.在取时间的时候加八小时。这里有问题,如果是跨天的、跨月的我们不好相加,虽然可以换算成毫秒相加,但是有的时候取出来的数据不能换算,所以第一种方法,直接pass。

2.在gui界面修改,这个简直了,我怀疑他们在用Excel。

 

下面说说我遇到的问题,其实这个问题主要集中的mongooes插件里面。

由于的我的数据库需要多种语言连接,所以我希望数据库里的时间是正确的,这样我就不用考虑加减的问题了。

所以我在存储时间的时候,选择了存储时间的毫秒数。(python获取到的是秒,我们需要乘以1000让小数点后移动三位,变成毫秒后存储),等到取值时再使用node的silly-datetime插件来格式化毫秒数,这样就不会因为mongo数据库date类型而导致时间的相差+8或是-8小时了。

python获取毫秒:

nowTime=time.time() #得到的当前时间秒数
nowTime=nowTime*1000 #将小数点后移动三位,得到毫秒数

js/node获取毫秒数:

new Date().getTime() // 获取到当前时间的毫秒数

silly-datetimg格式化毫秒数:

const SDTime=require("silly-datetime");
let t=SDTime.format(0,'YYYY-MM-DD HH:mm:ss');
let t2=SDTime.format(1621907636771,'YYYY-MM-DD HH:mm:ss');
console.log(t) //1970-01-01 08:00:00
console.log(t2) //2021-05-25 09:53:56

关于数据库的操作这里就不讲了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圈点Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值