JS new Date() 保存到 mongodb 中会早8个小时,我们这里是东八区,mongodb 保存的是格林尼治时间

发布于 2022-09-05 00:36:39 字数 618 浏览 9 评论 0

我用的 mongoose ,
这是我定义的 Schema :

const report = mongoose.Schema({
    datetime: Date,
    username: String,
    detail: mongoose.Schema.Types.Mixed
})

这是我存入的数据:

let params = {
    username: 'testadmin',
    detail: '23123',
    datetime: new Date('December 17, 1995 03:24:00')
}

存进 mongodb 中后存的时间会早八个小时:
clipboard.png
‘95年12月17日凌晨3点’变成了‘12月16日晚上7点,时区搞错了,,,请问大家这种情况应该怎么办?mongodb 或者 mongoose 有相应的处理方法吗?

小弟这里先谢过!

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

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

发布评论

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

评论(7

对你的占有欲 2022-09-12 00:36:39

原来mongodb中存的是UTC时间,全球统一,,,那就直接存,再存之前不做操作,读取出来后把时间new Date(report.datetime).toLocaleString(),调用js自带的Date().toLocaleString()就行了

蘸点软妹酱 2022-09-12 00:36:39

因为 mongoose 和 sequelize 开始的时候,没有考虑时区,ORM 之后就搞错时区了。解决方法去看看最新版本是否解决,如果还未解决可以试试把问题发给作者,然后只能自己在应用层预处理,写入 +8 小时,读出 -8 。

夜夜流光相皎洁 2022-09-12 00:36:39

getTimezoneOffset() 方法可返回格林威治时间和本地时间之间的时差,以分钟为单位。

≈。彩虹 2022-09-12 00:36:39

存成unix时间戳吧,这样就不会有啥问题了,取出来的时候 根据时区去处理转换就可以了

甜警司 2022-09-12 00:36:39

你在把那个iso时间new Date回来就好了,存的是iso标准时间,new Date的时候回自动转成本地时区

掌心的温暖 2022-09-12 00:36:39

正如楼上有同学所说的,使用ISO格式:new Date("2017-03-02T08:00:00+08:00")

或者

使用moment.js

供参考。

Love MongoDB! Have fun!


巨坚强 2022-09-12 00:36:39

可以尝试保存时间戳

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文