【问题标题】:How to get current date/time using database timezone in sequelize如何在 sequelize 中使用数据库时区获取当前日期/时间
【发布时间】:2021-02-11 01:26:50
【问题描述】:

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

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

但是当我通过节点const [[{time}]] = await db.sequelize.query('SELECT CURRENT_TIMESTAMP AS time'); 中的 Sequelize 进行查询时,它会返回 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。如何获取东部时间(数据库时区)?

【问题讨论】:

    标签: javascript mysql sql node.js sequelize.js


    【解决方案1】:
    1. 我不知道像 getCurrentDate() 这样的 sequelize 方法。

    2. UTC 转换问题似乎困扰着所有人(包括我自己)。 Here 是一些细节。不确定dialectOptions: {useUTC: false }, 是否有 any 功能 - 只需添加 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);
        });
    

    这对我来说很好 - 但一定要彻底测试!

    【讨论】:

    • 谢谢@KenOn10 你将如何将它作为一个 js 日期对象?只需将 return 语句包装在 new Date()?
    • 谢谢!仍在研究它是否能解决问题。
    【解决方案2】:

    像这样在dialectOptions 中添加useUTC 属性

    dialectOptions: {
        encrypt: false ,
        options: {
            useUTC: false, // for reading from database
        },
    },
    

    【讨论】:

      猜你喜欢
      • 2011-05-31
      • 2010-11-21
      • 1970-01-01
      • 2020-04-04
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      相关资源
      最近更新 更多