【问题标题】:Change date storage format in MongoDB更改 MongoDB 中的日期存储格式
【发布时间】:2016-01-22 22:04:55
【问题描述】:

在输入的 json 文件中,我以这种格式接收日期:

{ "dt_received" : "2016-01-22T12:35:52.123+05" }

当加载到 MongoDB 中时,这些日期会以这种方式存储:

dt_received: "2016-01-22T07:35:52.123Z"

问题是我需要时区来计算我的指标。 在约束条件下,我无法创建新列,例如“dt_received_timezone”。 所以我正在寻找将日期存储格式更改为 MongoDB 以使时区出现(或至少不会消失) 这是解决这个问题的方法吗?或者有什么解决办法?

【问题讨论】:

  • 如果您将dt_received 存储为真实的Date,您将免费获得所有这些。例如,在你的 mongo-shell 中输入new ISODate('2016-01-22T07:35:52.123Z').getTimezoneOffset(),你会得到-60。这是你需要的吗?
  • 这个question 可能会有所帮助。
  • 这不是我要找的。我想检索 +05 信息,以便获得我的原始日期/小时 12:35:52。
  • 有什么理由吗?当您在 Javascript 中将数据呈现为 new Date('2016-01-22T07:35:52.123Z') 时,它将显示 2016-01-22T12:35:52.123+05,因为浏览器的时区是 +5。

标签: mongodb


【解决方案1】:

如果你接收到来自不同时区的数据,并且想要保持时区偏移,你必须像这样将它保存到数据库中:

var now = new Date();
db.data.save( { date: now, offset: now.getTimezoneOffset() } );

然后您可以像这样重建原始时间

var record = db.data.findOne();
var localNow = new Date( record.date.getTime() -  ( record.offset * 60000 ) );

更多详情请参阅documentation

【讨论】:

  • 假设应用程序服务器(mongo 客户端)的时区为 +5,但情况可能并非如此。原始时区不会保留在任何地方,除非明确保存到文档的单独属性中,否则将会丢失。
  • 是的,你是正确的@AlexBlex。我已经更新了我的答案。当然,推荐的方法是将时间偏移存储在一个字段中,但是,Rouse 似乎不允许这样做。
  • @Jaco:此操作返回 -1,这是我的 mongo 服务器的偏移量。我可以收到来自不同时区的数据,我需要保留这些信息。
  • 如果您确实需要保留时区信息(而不是全面保留 UTC 日期),则必须保存它。我已经更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 2019-03-13
相关资源
最近更新 更多