【问题标题】:Mongo $dateToString is changing the day [duplicate]Mongo $dateToString 正在改变日期[重复]
【发布时间】:2016-08-12 14:36:27
【问题描述】:

我正在使用 Mongo 的聚合框架通过 $dateToString 方法将日期转换为字符串。由于时区,它正在改变一天。我可以做些什么来解决这个问题?

输入: new Date("2016-04-19T00:00:00+1000") *注意时间偏移量因项目而异。

输出:“2016-04-18”

所需输出:“2016-04-19”

代码:

dateString: { $dateToString: { format: "%Y-%m-%d", date: "$date" } }

奇怪的是使用 $substring 也返回相同的结果...

dateString: { $substr: ["$date", 0, 10] }

【问题讨论】:

  • new Date("2016-04-19T00:00:00+1000") 实际上是 ISODate("2016-04-18T14:00:00Z")。 BSON 日期始终存储在 UTC,这是一件好事。您可能应该不理会它,但如果您必须转换为时区,那么只需进行数学运算并添加偏移量。
  • @NeilLunn 不太确定这个问题是否属于重复问题......我要问的内容非常具体,并且该问题的解决方案不符合我的需求。我的偏移时间可能会根据我正在聚合的集合项目而改变
  • 当然是重复的。如前所述 "all BSON Dates are in UTC" ,这意味着没有存储偏移信息。时区是相对于“客户端”的概念,客户端位于多个位置。因此,唯一适用的偏移量是来自“客户”观点的偏移量。你真的应该阅读内容并理解它,而不是等待回应说不同的东西。没有不同的反应。因此,为什么没有必要开放答案只会说完全相同的事情。
  • 如果你想把“夏令时抵消”,"Aggregate Group by Date with Daylight Saving Offset"。再说一遍,这都是相对数学,由“客户端”来识别时区,而不是服务器。
  • 这样怎么样(28800000 是我的时区偏移量): $dateToString: { format: '%Y-%m-%d %H:%M:%S', date: {$add : ['$time', 28800000]} }

标签: mongodb aggregation-framework


【解决方案1】:

发生这种情况是因为它正在转换为 UTC 时间。

所以要么使用 UTC 时间编码,要么更改为 ISODate。

使用此链接获取时间http://currentmillis.com/

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多