9

我在 node.js 中使用 Sequelize 来保存打开和关闭时间。我也在使用 moment.js 来格式化。更改 FindOrCreate 我正在这样做:

result.open = moment(hours.open, "hh:mma").format("YYYY-MM-DD HH:mm:ss");
result.save()
...

这工作正常,时间被格式化为 MySQL 的日期时间格式。问题是当我检索 Seqquelize 认为它是 UTC 时间并将其转换为 EST(我的服务器时区)的时间时。

我希望它以 UTC 的形式进入数据库并以相同的方式出现。有什么我做错了吗?为什么 Sequelize 不会在插入时将其转换为 UTC,而是假定它是 UTC 出来的?另外,有没有办法让它不尝试转换为我的服务器时区?

4

4 回答 4

9

我有同样的问题。我已经这样修复它:

config/sequelize.js

const sequelize = new Sequelize(database, user, password, {
host,
dialect: 'mysql',
port,
operatorsAliases,
dialectOptions: {
    useUTC: true, // -->Add this line. for reading from database
},
timezone: '+02:00', // -->Add this line. for writing to database
pool: {
    max: 10,
    min: 0,
    idle: 10000,
},
logging: console.log,
// define: {},
})

时刻JS(UTC):

const ACCEPT_FORMAT = 'YYYY-MM-DD hh:mm:ss'
const { start_date, end_date } = req.params
const start = moment.utc(start_date, ACCEPT_FORMAT)
const end = moment.utc(end_date, ACCEPT_FORMAT)
console.log(start)
console.log(end)

希望它会帮助某人.... :)

于 2018-01-22T19:34:02.753 回答
6

我知道这已经很晚了,但这是为那些在postgres上苦苦挣扎的人准备的(也许这可以为您指明其他引擎的正确方向)

如您所知,postgres 以 UTC 存储日期时间。

对我来说,问题不是在 Sequelize 中,而是在pg包中。

为了修复它,把它放在你的sequelize = new Sequelize()行之前

var types = require('pg').types;
var timestampOID = 1114;
types.setTypeParser(1114, function(stringValue) {
  return new Date( Date.parse(stringValue + "0000") );
});

我认为问题在于pg包正在执行new Date(stringValue),它返回服务器时区中的日期,这是错误的(除非它本身在 UTC 中)

有关更多信息,请参阅此线程: https ://github.com/brianc/node-postgres/issues/429

于 2015-02-11T13:12:59.417 回答
2

我遇到了同样的问题,你用错了。您应该使用moment.utc而不仅仅是moment.

看看现在的文档: http: //momentjs.com/docs/#/parsing/utc/

result.open = moment.utc(hours.open, "hh:mma").format("YYYY-MM-DD HH:mm:ss");
result.save()
于 2014-03-26T15:44:30.350 回答
0

方式。

转到节点模块中 mssql 的数据类型

...\node_modules\sequelize\lib\dialects\mssql\data-types.js

然后像这样将您的 DateType 值修改为您当前的 UTC

 class DATEONLY extends BaseTypes.DATEONLY {
    static parse(value) {
      return moment.utc(value).format('YYYY-MM-DD');
    }
  }

第二种方式(推荐)。

您可以在 Sequelize 连接中添加 useUTC 属性

const sequelize = new Sequelize({
    ......
    dialectOptions: {
        encrypt: false ,
        options: {
          useUTC: false, // for reading from database
          requestTimeout: 90000
        },
    },
    })
于 2021-02-08T07:37:27.033 回答