【问题标题】:Date in response is different than from MongoDB响应日期与 MongoDB 不同
【发布时间】:2020-02-19 22:38:13
【问题描述】:

我使用 Mongoose 作为 MongoDB 客户端,使用 Node 并且我在 -5:30 时间得到日期。

数据库中的日期

"createdAt" : ISODate("2020-02-18T05:17:43.368+05:30"),

回复日期

"createdAt": "2020-02-17T23:47:43.368Z"

它正在影响我的应用程序数据。有没有办法得到日期,因为它是 数据库。 谢谢。 如果需要更多信息,请写。

Mongoose 架构

const price = Schema({

}, {
  timestamps: true
})

查询

  return Price.find(obj)
  .sort({
    _id: -1
  })
  .limit(parseInt(query.size) || 100)
  .skip((parseInt(query.size) || 100) * (parseInt(query.page) || 0))
  .populate('item')
  .lean()

服务器时间日期ctl

Local time: Wed 2020-02-19 12:47:29 IST
Universal time: Wed 2020-02-19 07:17:29 UTC
RTC time: Wed 2020-02-19 07:17:29
Time zone: Asia/Kolkata (IST, +0530)
System clock synchronized: yes
ystemd-timesyncd.service active: yes
RTC in local TZ: no

【问题讨论】:

    标签: node.js linux mongodb ubuntu mongoose


    【解决方案1】:

    MongoDB 会在保存期间将您的日期转换为 GMT 时间。但是,如果您再次将日期拉到本地时区,您将有适当的时间。

    ISODate 采用 UTC。

    浏览器转换为本地时区。

    这适合你吗?

    z.toUTCString()

    【讨论】:

    • 有什么方法可以停止这种自动转换并准确获取数据库中存储的任何内容吗?您能否分享一些解决方案,以解决您回答的问题日期将转换为本地时间,但我的服务器和本地时区相同(亚洲/加尔各答)。
    • MongoDB 始终将日期存储为 UTC 时间。答案已更新。请您检查一下是否适合您。
    • 所以要转换结果中的所有日期,我必须遍历所有文档并转换为 UTC?
    • 我不明白真正的意图。当我们在 MongoDB 中保存 Date 时,它​​总是存储对应日期的 UTC 时间。现在印度时间是5:25。将 new Date() 保存到 DB 时,保存为 2020 年 2 月 19 日 11:55。
    • 然后我的 GET 查询取值并在浏览器上打印,它会显示 5:25。
    【解决方案2】:

    MongoDB 将日期存储为 64 位整数,这意味着 Mongoose 默认不存储时区信息,因此当您使用服务器查询集合时,JavaScript 运行时会将您的集合标记转换为您的操作系统时区(默认本地时区)

    你可以检查

    console.log(process.env.TZ)
    

    因此,如果您希望您的响应与数据库相同,只需将时区设置为 utc

    【讨论】:

      猜你喜欢
      • 2015-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 2023-04-04
      • 1970-01-01
      • 2019-11-20
      相关资源
      最近更新 更多