【问题标题】:Mongodb Map Reduce By Date is One Month OffMongodb Map Reduce By Date 关闭一个月
【发布时间】: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


【解决方案1】:

根本问题是您在操作中使用了Date 的本地时间方法。一个时区的 7 月 1 日日期可能是另一个时区的 6 月 30 日。

解决方案是使用Date 的UTC 方法而不是本地方法,这样您的日期处理就不会受到主机服务器时区的影响。

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多