2013-05-07 79 views
0

我使用$哪里查询使用代码的月份和日期的对象像下面这样获得的UserInfo收藏与5月7日的生日:

db.UserInfo.find(function() { 
    var d = new Date(this.Birthdate); 
    return d.getDate() === 7 && d.getMonth() === 4; 
}); 

这完美地在本地工作,返回生日设置为5月7日的UserInfo对象。然而,这远远地打破了(Heroku + Mongolab),因为我找回出生日期设置为1210222800000的对象,例如5月8日。为什么会发生这种情况,我怎样才能让mongo返回正确的对象?

+0

2.4.2本地和2.2.4远程,会导致getDate方法的区别吗? – 2013-05-07 19:26:19

+0

2.2和2.4使用不同的Javascript引擎(spidermonkey vs V8)。 – 2013-05-07 20:07:19

回答

2

它看起来像一个时区问题。我假设你的日期在所讨论的那一天都应该是“午夜”。这个是8个小时。

# TZ=UTC date -d @1210222800000 
Tue Jun 8 08:00:00 UTC 40320 

由于JSON并没有真正的日期类型,所以您必须清楚转换发生的位置。最佳做法是,应用程序有责任在发送到数据库之前始终转换为UTC。 (如果你只是试图存储一个日期,那么可以删除时间,否则你的日期比较将是错误的。)

在UTC时区运行数据库服务器和应用程序服务器也是最佳做法。 (如果需要,该应用程序应该转换为本地时间,通常是每个用户,因为用户通常在不同的时区。)