猿问

如何在续集中使用数据库时区获取当前日期/时间

我需要根据数据库时区(不是我的本地时区,也不是默认的 UTC 时区)使用 Sequelize 获取当前时间。是否有 Sequelize 方法来做到这一点?

我的数据库是东部时间,当我直接查询数据库时,SELECT CURRENT_TIMESTAMP;它返回东部时间的日期/时间(这是正确的)。

但是当我通过 Node 中的 Sequelize 查询时,const [[{time}]] = await 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. 如何在东部时间(数据库时区)获取它?


慕斯709654
浏览 198回答 2
2回答

炎炎设计

我不知道像 getCurrentDate() 这样的续集方法。UTC 转换问题似乎困扰着所有人(包括我自己)。 这里有一些细节。不确定是否 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);    });这对我来说很好用 - 但一定要彻底测试!

富国沪深

像这样添加useUTC属性dialectOptionsdialectOptions: {    encrypt: false ,    options: {        useUTC: false, // for reading from database    },},
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答