javascript - 如何在sequelize中使用数据库时区获取当前日期/时间

标签 javascript mysql sql node.js sequelize.js

我需要根据数据库时区(不是我的本地时区,也不是默认的 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。如何获取东部时间(数据库时区)?

最佳答案

  1. 我不知道像 getCurrentDate() 这样的 Sequelize 方法。

  2. 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/

相关文章:

javascript - 是否可以为一个测试设置环境变量?

javascript - 无法替换 for 循环中的变量源

javascript - 为什么我的 AdMob 横幅广告在 Expo Client 中显示,但在最终版本中却没有显示?

PHP MYSQL 插入类树

php - PDO 只会返回第一行数据集

sql - 无法从存储过程将数据插入临时表

sql - 在 id 字段上重置种子的 Rails 方法

javascript - 带逗号和小数点的数字格式

python - 从 Jupyter Notebook 连接到 MySQL 数据库

mysql - 如何从表中获取评论最多的用户