结论:放弃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
关于数据库的操作这里就不讲了。