2016-02-27 88 views
4

在模型模式,如何更改貓鼬日期時區?

使用

updated: { 
    type: Date, 
    default: Date.now 

在server.js

put(function(req, res) { 
    var query = {name: req.params.name}; 
    // use our bear model to find the bear we want 
    Domain.find(query, function(err, domains) { 

     if (err) 
      res.send(err); 
     var domain = domains[0]; 
     domain.password = req.body.password; // update the bears info 
     domain.updated = new Date(); 
     // save the bear 
     domain.save(function(err, data) { 
      if (err) 
       res.send(err); 

      res.json({ status: 'success', message: 'domain updated!' }, data); 
     }); 

    }); 
}); 

然而,

在DB方面,它表明,

"updated": "2016-02-27T16:20:42.941Z" 

但是,我的時區爲UTC + 02.00

所以應該像18點20分42秒

我做錯了什麼?

回答

1

時間戳是時區不可知的,存儲爲一個unix時間戳。此時間戳將跨時區工作,並且節點使用服務器的當前時區解釋它。您顯示的日期已正確存儲。一旦你找回它,如果你的服務器的時區是UTC + 2,它會顯示你正確的時間。

+0

我的Ubuntu服務器的時區EET所以我需要將其更改爲UTC + 2? –

+2

最佳做法是將您的服務器的時區保持爲UTC,以便您不會因日期差異查詢而感到沮喪。在UTC時日期時間將更容易推理。我已經做了很多次,它可以幫助您避免很多時區轉換頭痛。 –

1

您可以從一個特定的UTC時間創建Date對象:

new Date(Date.UTC(year, month, day, hour, minute, second))

0

我改變了這一點,

var utc = new Date(); 
utc.setHours(utc.getHours() + 2); 
domain.updated = utc; 

現在,它的工作原理。

0

你的代碼沒有錯。無論您試圖插入日期的時區,MongoDb都以UTC格式保存日期。

如果登錄數據庫保存前domain.updated,結果將是UTC + 2(本地時間)

如果你看到在DB更新的列,結果將是UTC

如果取從數據庫更新的列值,然後再結果將是UTC + 2(本地時間)

0

使用moment.js它是那麼容易,因爲:

var moment = require('moment'); 

var utcDate = moment.utc().toDate(); 

享受!

0

我發現在貓鼬,timzone插件解決方案

看到here

它的工作!)