如何更改mongoosedate时区?

在模型模式中,

运用

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); }); }); }); 

然而,

在数据库方面显示,

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

但是,我的时区是UTC + 02.00

所以应该是18:20:42

我做错了什么?

时间戳是时区不可知的,存储为一个unix时间戳。 这个时间戳将跨时区工作,并且节点使用服务器的当前时区来解释它。 您显示的date已正确存储。 只要您检索它,如果您的服务器的时区是UTC + 2,它会显示您正确的时间。

您可以从特定的UTC时间创build一个Date对象:

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

我改变了这一点,

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

现在起作用了。

你的代码没有错。 MongoDb以UTC格式保存date,无论您在哪个时区尝试插入date。

如果在保存到数据库之前loggingdomain.updated,则结果将是UTC + 2(当地时间)

如果您在数据库中看到更新的列,则结果将以UTC表示

如果您从数据库获取更新的列值,那么结果将以UTC + 2(您当地的时间)

使用moment.js这样简单:

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

请享用!

我发现在mongoosetimzone插件的解决scheme

看到这里

是工作!)