我目前正在项目中使用 Sequelize 和 postgres 。我需要更改查询,因此它返回带有时区偏移量的created_at列。
var sequelize = new Sequelize(connStr, {
dialectOptions: {
useUTC: false //for reading from database
},
timezone: '+08:00' //for writing to database
});
但这会影响整个数据库。但我只需要使用时区进行选择查询。有谁知道怎么做?
答案 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)
与
一起使用DialectOptionsdateStrings: 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