航行自动创建在和自动更新在插入日期时间从我当前时区向前 5 小时



实际上我正在使用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。

相关内容

  • 没有找到相关文章

最新更新