【发布时间】: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