启动autoCreatedAt和autoUpdatedAt插入date时间5小时向前形成我目前的时区

其实我正在用SailsJS v0.11.3MongoDB v3.2.1搭配MongoDB v3.2.1 sails-mongo适配器。

我正在使用sails autoCreatedAt和autoUpdatedAd来存储跟踪不同表格中文档的时间戳。

我已经意识到这些logging是从墨西哥城当地时区+6小时起储存的。

 Actual date = 2016-02-11T13:24:23 ==> Stored value = 2016-02-11T19:24:23 

我在我的linux操作系统中检查了时区,并且设置正确。

我找不到问题在哪里,或者如何解决。

有人能帮我解决吗? 提前致谢。

回顾一下这个问题,在Gitter的 balderdash / sails官方频道中提出一些问题,我发现了下一个:

始终使用UTC时间非常重要。 因为这是将date时间存储到数据库的标准。

将这些内容存储到服务器时区只会让您因为不同的原因而陷入麻烦,正如本video中所解释的。

  • 如果有人因为某种原因改变你的服务器时区,你就搞砸了!

build议将它们存储在UTC时间,如果您需要将它们转换为当地时区(或其他),只需使用moment.js即可。

您将获得数据的一致性,因为在您修改客户端的这些属性的任何时候 ,它们都会被UTC清除,并且您可以轻松地从该值中获取任何时区 ,无论您想要获取哪个时区,都可以使用存储在MongoDB中的UTC值。

 var moment = require('moment'); var date = moment(updatedAt).locale('es').tz('America/Mexico_City').format(); 

你会得到你想要的正确时区的价值!

 Feb 10 2016 12:34:01 GMT-0600 (CST) 

正如你所看到的,它显示了CST时间,这是墨西哥城的时间,而不是UTC时间。

我真的推荐这样做! 或者至less,这是我认为最好的select。

我希望这可能是有用的。

MongoDB默认存储UTC时间 。 墨西哥城似乎在UTC-06:00的中央时区,因此六小时不同。

你应该能够从MongoDB shell中看到这个:

 > db.testDate.insert({date: new Date()}); WriteResult({ "nInserted" : 1 }) > db.testDate.find().pretty() { "_id" : ObjectId("56bb88cbe9ef8429d2c1d6d8"), "date" : ISODate("2016-02-10T19:00:27.459Z") } 

date结尾处的Z表示UTC。 我插入date的时间是当地时间21:00,但因为UTC + 02:00,所以显示19:00。