启动autoCreatedAt和autoUpdatedAt插入date时间5小时向前形成我目前的时区
其实我正在用SailsJS v0.11.3
和MongoDB 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。