mongodb怎么存储本地时间
基于node
开发,使用mongoose
对mongodb
操作,直接存储时间是存为UTC时间,与北京时间是相差八个钟的,如何在存储的时候,把时间先转为北京时间再存呢?有试过网上说的方法,好像不行~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
基于node
开发,使用mongoose
对mongodb
操作,直接存储时间是存为UTC时间,与北京时间是相差八个钟的,如何在存储的时候,把时间先转为北京时间再存呢?有试过网上说的方法,好像不行~
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
存取都是utc 不会造成时间差的问题啊。
如果为了观看方便,可以存string,但是会导致不能查询.
也可以存时间戳
Date.now()
这样就无视时区。存储是强制用UTC时间存储的,但是你获取时可以转换为本地时间的,有个mongodb的全局设置,可以设置为自动转换为本地时间的
其一,时间的解析问题
首先给你看同段代码的两个不同结果(分别是在不同时区系统,但代码是一致的):
我当前系统的node命令
新建的一个linux系统,node命令
你可以看到的是,同段代码,两个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.
结语
正常开发中,数据库显示是ISODate格式也不是很影响,开发中往往是传给前台展示用的。比如把ISODate(字符串)传给前端展示,那前端肯定是会取解析的(通过 new Date())。例如上述案例:
保证时间存取一致的解决方案:
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服务的环境时区和你当前时区是一致的,这样的话也不影响。