基于node
开发,使用mongoose
对mongodb
操作,直接存储时间是存为UTC时间,与北京时间是相差八个钟的,如何在存储的时候,把时间先转为北京时间再存呢?有试过网上说的方法,好像不行~
基于node
开发,使用mongoose
对mongodb
操作,直接存储时间是存为UTC时间,与北京时间是相差八个钟的,如何在存储的时候,把时间先转为北京时间再存呢?有试过网上说的方法,好像不行~
首先给你看同段代码的两个不同结果(分别是在不同时区系统,但代码是一致的):
我当前系统的node命令
新建的一个linux系统,node命令
你可以看到的是,同段代码,两个getTime()的结果是不一致的。如果没有指定时区,则node会默认取当前的时区来创建时间。mongodb 也是一样的Date。
let t = new Date()
console.log(t.toUTCString()) // Mon, 02 Dec 2019 07:30:41 GMT
console.log(t.toString()) // Mon Dec 02 2019 15:30:41 GMT+0800 (GMT+08:00)
await new Temp({ name: '嘎嘎123', date: t }).save()
console.log(JSON.stringify(await Temp.findOne()))
// {"_id":"5de4bda1c7793356544ecdd5","name":"嘎嘎123","date":"2019-12-02T07:30:41.708Z","__v":0}
下面是用命令打印数据,注意图片中的Date,不是简单的字符串哦!
正常开发中,数据库显示是ISODate格式也不是很影响,开发中往往是传给前台展示用的。比如把ISODate(字符串)传给前端展示,那前端肯定是会取解析的(通过 new Date())。例如上述案例:
// 用本地浏览器控制台运行
new Date('2019-12-02T07:30:41.708Z').getHours() // 15
保证时间存取一致的解决方案:
toISOString
转换以下,比如 new Date('2019-12-02 07:42:32').toISOString()
,或者时转时间戳传new Date('2019-12-02 07:42:32').getTime()
。'2019-12-02 07:42:32'
这种不指定时区传,那么保证部署node服务的环境时区和你当前时区是一致的,这样的话也不影响。3 回答1.3k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
4 回答633 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答949 阅读✓ 已解决
2 回答1.5k 阅读
1 回答1.2k 阅读✓ 已解决
存取都是utc 不会造成时间差的问题啊。
如果为了观看方便,可以存string,但是会导致不能查询.
也可以存时间戳
Date.now()
这样就无视时区。