我目前正在我的项目中使用Sequelize和postgres。我需要更改查询,因此它返回带有时区偏移量的created_at列。
var sequelize = new Sequelize(connStr, {
dialectOptions: {
useUTC: false //for reading from database
},
timezone: '+08:00' //for writing to database
});
但这会影响整个数据库。但我只需要使用时区进行选择查询。有谁知道这是怎么做到的吗?
我建议将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);
};
使用dialectOptions
dateStrings: true,
typeCast: true
您可以看到以下完整示例:Sequelize set timezone and datetime format for mysql
这是我配置它的方式:
dialectOptions: {
dateStrings: true,
typeCast: true,
},
timezone: 'America/Los_Angeles',
http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html