2016-11-08 393 views
0

當我嘗試使用貓鼬在mongodb中存儲某些東西時,我遇到了一個時區問題。錯誤的時區nodejs mongoose

我創造了這樣一個模式:

var userSchema = new mongoose.Schema({ 
    name: { 
     type: String 
    }, 
    created_at: { 
     type: Date 
    } 
}); 

它找到一個日期範圍($ GTE和$ LTE)的用戶是在我的代碼很重要。

user.created_at = new Date(); 

在我的數據庫與此用戶錯誤的時區創建:

問題創建用戶時,會發生。

我曾試圖用 「moment-timezone.js」,如:

user.created_at = moment().tz("America/Belem").format(); 

與時區仍然在MongoDB中是相同的,但是當我控制檯日誌中的問題。 「那一刻()TZ(」 美洲/貝倫「)。 format()「我在數據庫中獲得了正確的時區,但它出錯了,所以我認爲問題是使用mongoose鍵入Date,,因爲它節省了UTC時間,但我想在當地時間

我試圖使用類型字符串,而不是類型日期在我的架構,我得到了正確的時區與「時間timezone.js」,但我的查詢$ gte和$ lte找到用戶沒有工作了。

在這個討論中here問題是一樣的,但他們說服務器時區更改爲UTC,但他們沒有說明如何去做。我試圖this來改變服務器的時區,但它不適用於我(我使用的是Windows 10),我認爲這不是正確的道路。

請幫我解決這個問題。告訴我解決這個問題的最好方法。

謝謝。

+0

請看看這個。您應該始終嘗試使用UTC存儲時間。 http://stackoverflow.com/a/40425115/2683814 – Veeram

+0

首先感謝您的回覆。我試過你的解決方案,但沒有奏效。 :'( –

+0

你在db中看到了什麼?現在的日期如何存儲? – Veeram

回答

0

你可以這樣做:

var d = new Date(); 
d.setUTCHours(0, 0, 0, 0); // hour,minute,seconds,milliseconds 
user.created_at=d; 

通過這種方式,您可以爲 「美國/貝倫」 設置UTChours。

例如美洲/貝倫有UTC小時+5那麼在哪裏做

d.setUTCHours(5, 0, 0, 0);