为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕斯709654 2021-11-04 10:37:44
我需要根据数据库时区(不是我的本地时区,也不是默认的 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. 如何在东部时间(数据库时区)获取它?
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

我不知道像 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);

    });

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


查看完整回答
反对 回复 2021-11-04
?
富国沪深

TA贡献1790条经验 获得超9个赞

像这样添加useUTC属性dialectOptions


dialectOptions: {

    encrypt: false ,

    options: {

        useUTC: false, // for reading from database

    },

},


查看完整回答
反对 回复 2021-11-04
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信