Sequelize设置时区来查询

时间:2018-02-22 16:30:48

标签: postgresql select sequelize.js timezone-offset

我目前正在项目中使用 Sequelize postgres 。我需要更改查询,因此它返回带有时区偏移量的created_at列。

var sequelize = new Sequelize(connStr, {
dialectOptions: {
    useUTC: false //for reading from database
},
timezone: '+08:00' //for writing to database

});

但这会影响整个数据库。但我只需要使用时区进行选择查询。有谁知道怎么做?

3 个答案:

答案 0 :(得分:0)

我建议将moment.js与以下方法之一结合使用:

如果您需要参数化时区,那么您可能希望为每个单独的查询添加偏移量,或者在表中添加一个指示时区的附加字段,因为它似乎不像sequelize允许参数化的getter。 / p>

例如:

const moment = require('moment.js');
const YourModel = sequelize.define('your_model', {
  created_at: {
    type: Sequelize.DATE,
    allowNull: false,
    get() {
      return moment(this.getDataValue('created_at'))
        .utcOffset(this.getDataValue('offset'));
    },
  },
});

另一种可能性是以类似的方式扩展模型原型的实例方法,这允许您在需要created_at值时指定偏移量:

const moment = require('moment.js');
YourModel.prototype.getCreatedAtWithOffset = function (offset) {
  return moment(this.created_at).utcOffset(offset);
};

答案 1 :(得分:0)

一起使用DialectOptions
dateStrings: true,
typeCast: true

您可以看到以下示例的完整示例: Sequelize set timezone and datetime format for mysql

答案 2 :(得分:0)

这是我的配置方式:

  dialectOptions: {
    dateStrings: true,
    typeCast: true,
  },
  timezone: 'America/Los_Angeles',

http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html