实际上我正在使用SailsJS v0.11.3
,并使用sails-mongo
适配器MongoDB v3.2.1
。
我正在使用帆自动创建AT和自动更新广告来存储时间戳,以便在不同的表中跟踪文档。
我意识到记录是从现在起+6小时存储在我的本地时区,即墨西哥城。
即
Actual date = 2016-02-11T13:24:23 ==> Stored value = 2016-02-11T19:24:23
我已经检查了我的 linux 操作系统中的时区,它设置正确。
我找不到问题在哪里或如何解决它。
有人可以帮助我吗?提前谢谢。
环顾四周,在 Gitter 的 balderdash/sails 官方频道中提出一些问题,我发现了下一个:
始终使用 UTC 时间非常重要。因为这是将日期时间存储到数据库的标准。
如本视频所述,将它们存储到您的服务器时区只会让您陷入麻烦,原因各不相同。
- 如果有人出于某种原因更改了您的服务器时区,那么您就完蛋了!
建议将它们存储在 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
时间。
我真的建议这样做!或者至少,这是我认为最好的选择。
我希望它能有用。
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")
}
其中日期末尾的Z
表示 UTC。我插入日期时是当地时间 21:00,但它显示 19:00,因为我使用的是 UTC+02:00。
在引导程序中.js我总是添加:
process.env['TZ'] = '0';
这似乎适用于存储所有 UTC。