我需要根据数据库时区(不是我的本地时区,也不是默认的 UTC 时区)使用 Sequelize 获取当前时间。有 Sequelize 方法可以做到这一点吗?
我的数据库采用东部时间,当我直接查询数据库时SELECT CURRENT_TIMESTAMP;
它返回东部时间的日期/时间(这是正确的)。
但是当我在 Node 中通过 Sequelize 查询时 const [[{time}]] = wait db.sequelize.query('SELECT CURRENT_TIMESTAMP AS time');
它返回 UTC 格式的日期/时间.
两个问题:
1 - 我更喜欢使用 Sequelize 方法而不是原始查询。
2 - 这仍然没有得到我想要的结果。时间必须是东部时间。
这是我的数据库设置:
const sequelize = new Sequelize(dbUrl, {
dialectOptions: {
useUTC: false // for reading from database
},
timezone: '-04:00', // for writing to database
define: {
charset: 'utf8'
}
})
如上所述,当我使用上述查询进行查询时,日期始终以 UTC 格式返回,这是我没想到的,因为我说过 useUTC: false
。如何获取东部时间(数据库时区)?
最佳答案
我不知道像 getCurrentDate() 这样的 Sequelize 方法。
UTC 转换问题似乎困扰着每个人(包括我自己)。 Here是一些细节。不确定
dialectOptions: {useUTC: false },
是否具有任何功能 - 只需添加 typeCast 方法就可以解决我的问题。dialectOptions: { typeCast: function (field, next) { // for reading from database if (field.type === 'DATETIME') { return field.string() } return next() },
结果可用于新的 js Date 对象:
const sql = 'select current_timestamp';
my_app.my_DB.query(sql, {raw: true, type: Sequelize.QueryTypes.SELECT})
.then(data => {
console.log(data[0].current_timestamp);
let d1 = new Date(data[0].current_timestamp);
});
这对我来说效果很好 - 但一定要彻底测试!
关于javascript - 如何在sequelize中使用数据库时区获取当前日期/时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58168729/