【发布时间】:2013-12-11 22:32:15
【问题描述】:
我在 Rails 中使用 mongoid 并有一个地图减少以按日期输出帖子。在本地,它按预期工作,但是当我使用 Heroku/MongoLab 部署它时,其中一个日期计数比它应该的位置晚了一个月。
地图:
function() {
emit(new Date(this._revisions.publish_date.getFullYear(), this._revisions.publish_date.getMonth(), 1), {count: 1});
}
减少:
function(key, values) {
var result = {count: 0}
values.forEach(function(value) {
result.count += value.count;
});
return result;
}
1 月的本地结果为 1,7 月的结果为 2,这是正确的 远程结果 1 月为 1,6 月为 2
我知道 JavaScript 中有 0 个索引月,但我认为这不是问题,因为它在本地运行良好。这可能是时区问题,但不知道为什么会导致它关闭一个月。
更新
我将有问题的记录上的日期更改为 7 月 2 日而不是 7 月 1 日,并且它按预期执行。不知道为什么 7 月 1 日被排放为 6 月,而 7 月 2 日被排放为 7 月。似乎每个月 1 日的所有日期都像上个月一样发出,这似乎是一个问题,为什么这只发生在远程服务器上而不是本地服务器上。
【问题讨论】:
-
这没有多大意义。在 JavaScript 中,一月是 0,二月是 1,依此类推。但至于为什么在两台服务器上不同,这很可能是一个时区问题,因为您使用的是本地时间 API。
-
你可以尝试
new Date(Date.UTC(year, month, 1))创建一个UTC日期。 -
根本问题是一个时区的 7 月 1 日日期可能是另一个时区的 6 月 30 日。您需要使用
Date的UTC 方法而不是本地方法。
标签: ruby-on-rails mongodb date mapreduce mongoid