2014-04-18 84 views
0

我們正在從Mongo數據庫中載入日期。看來Mongo保存UTC中的所有內容,但是當JS創建Date對象(用於顯示此日期)時,它會添加/減去時區偏移量。其結果是,例如:
JavaScript/NodeJS - MongoDB獲取具有偏移量的日期(時區)

  • 如果我保存日期「2013年6月20日01:00:00」
  • 的日期將於稍後在表單自動完成爲「2013-06 -19 22:00:00「(阿根廷時區UTC-03:00的示例),如果用戶在不更改日期的情況下保存該表單,日期將以錯誤的時間保存。
  • 最糟糕的是,下次保存會減少3小時以上,等等!

正如你所看到的,我可以得到不同的日子,我想要保存的日子。 我看到一些類似的情況,但沒有與這種相同的技術,我使用Nodejs,MongoDB和Backbone。現在我在做這樣的事情:

parse: function(response) { 
     var dateStart = new Date(response.time.start); 
     var offset = dateStart.getTimezoneOffset() * 60000; 
     response.time.start = new Date(dateStart.valueOf() + offset); 
     return response; 
    } 

但它確實難看,我有我每次實例化一個新的日期時間做()

任何人都知道一個好的方法來解決這一問題?

回答

1

很遺憾,當您在Web瀏覽器中實例化Date對象時,它將位於瀏覽器的本地時區中。有時這有助於,有時不會。你可以使用moment.jsmoment.utc(myDate)來處理這個問題,並保持UTC。總的來說,我強烈建議您使用日期相關代碼的瑞士軍刀。

另一種方法是將客戶端更改爲不向服務器提交字段,除非其值已真正改變。

+0

我掙扎着一個類似的問題,但對我來說,技巧是當我使用一個字符串對象,其中momentjs爲我創建它似乎將字段存儲在一個字符串中,而不是ISODate('.....' )格式。如果我使用javascript日期()對象它mongo pics了它是一個日期並將其存儲爲ISODate。所以問題是你如何讓mongo讀一個日期來約會...... –

+0

使用當前實例的'toDate()'函數返回到一個常規的javascript日期實例。 –