【发布时间】:2014-08-01 11:56:50
【问题描述】:
我在 MongoDB 中使用 MapReduce 以按天进行聚合。在地图代码上,我有以下sn-p来获取一年中的日期:
var day = Date.UTC(this.time.getFullYear(), this.time.getMonth(), this.time.getDate(), 1, 0, 0);
在大多数情况下,它运作良好。但是,显然存在时区问题,这会强制将时间戳移到前一个日期。例如,从这个查询的结果中获得的文档:
{'time' : {'$gte' : new Date(2014, 0, 1, 0), '$lt' : new Date(2014, 0, 1, 9)}}
最终成为 2013-12-31 17:00:00.000Z 和查询的人:
{'time' : {'$gte' : new Date(2014, 0, 1, 9), '$lt' : new Date(2014, 0, 1, 23)}}
最终是 2014-01-01 17:00:00.000Z。我该如何控制?
【问题讨论】:
-
今天是谁的“日子”?查询的人?存储数据的人?数据的对象是谁?您在哪些方面进行汇总?如果您按 UTC 汇总 - 那么您可能没有实现其中的任何。请记住,由于地球自转和时区的使用,每个人对什么是“一天”都有不同的概念。最重要的是,由于夏令时,并非所有“天”都是 24 小时。
标签: mongodb timezone timestamp