Sequelize设置时区来查询

问题描述 投票:2回答:3

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

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

});

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

postgresql select sequelize.js timezone-offset
3个回答
0
投票

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

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

例如:

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);
};

0
投票

使用dialectOptions

dateStrings: true,
typeCast: true

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


0
投票

这是我配置它的方式:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.