mongodb怎么存储本地时间

发布于 2022-09-11 23:50:56 字数 142 浏览 19 评论 0

基于node开发,使用mongoosemongodb操作,直接存储时间是存为UTC时间,与北京时间是相差八个钟的,如何在存储的时候,把时间先转为北京时间再存呢?有试过网上说的方法,好像不行~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

对你的占有欲 2022-09-18 23:50:56

存取都是utc 不会造成时间差的问题啊。

如果为了观看方便,可以存string,但是会导致不能查询.
也可以存时间戳Date.now() 这样就无视时区。

那一片橙海, 2022-09-18 23:50:56

存储是强制用UTC时间存储的,但是你获取时可以转换为本地时间的,有个mongodb的全局设置,可以设置为自动转换为本地时间的

方圜几里 2022-09-18 23:50:56

其一,时间的解析问题

首先给你看同段代码的两个不同结果(分别是在不同时区系统,但代码是一致的):

我当前系统的node命令
clipboard.png

新建的一个linux系统,node命令
clipboard.png

你可以看到的是,同段代码,两个getTime()的结果是不一致的。如果没有指定时区,则node会默认取当前的时区来创建时间。mongodb 也是一样的Date

其二,mongodb存储时间默认用的是 ISODate 格式

文档是这么解释的 new Date() returns the current date as a Date object. The mongo shell wraps the Date object with the ISODate helper. The ISODate is in UTC.

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,不是简单的字符串哦!
clipboard.png

结语

正常开发中,数据库显示是ISODate格式也不是很影响,开发中往往是传给前台展示用的。比如把ISODate(字符串)传给前端展示,那前端肯定是会取解析的(通过 new Date())。例如上述案例:

// 用本地浏览器控制台运行
new Date('2019-12-02T07:30:41.708Z').getHours() // 15

保证时间存取一致的解决方案:

  1. 存储时通过toISOString转换以下,比如 new Date('2019-12-02 07:42:32').toISOString(),或者时转时间戳传new Date('2019-12-02 07:42:32').getTime()
  2. 如果硬是要以'2019-12-02 07:42:32'这种不指定时区传,那么保证部署node服务的环境时区和你当前时区是一致的,这样的话也不影响。
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文