2013-05-07 82 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時區運行數據庫服務器和應用程序服務器也是最佳做法。 (如果需要,該應用程序應該轉換爲本地時間,通常是每個用戶,因爲用戶通常在不同的時區。)