Skip to content
Advertisement

How to get current date/time using database timezone in sequelize

I need to get the current time, according to the database timezone (not my local timezone, and not default UTC timezone), using Sequelize. Is there a Sequelize method to do this?

My database is in Eastern time, and when I query the db directly SELECT CURRENT_TIMESTAMP; it returns the date/time in Eastern time (which is correct).

But when I query via Sequelize in Node const [[{time}]] = await db.sequelize.query('SELECT CURRENT_TIMESTAMP AS time'); it returns the date/time in UTC.

Two problems:

1 – I would prefer using a Sequelize method instead of a raw query.

2 – This still doesn’t get me the result I want. The time needs to be Eastern.

This is my DB setup:

const sequelize = new Sequelize(dbUrl, {
  dialectOptions: {
    useUTC: false // for reading from database
  },
  timezone: '-04:00', // for writing to database
  define: {
    charset: 'utf8'
  }
})

As mentioned above, when I query using the above queries, the date is always returned in UTC, which I did not expect, given I said useUTC: false. How do I get it in Eastern time (the database timezone)?

Advertisement

Answer

  1. I’m not aware of a sequelize method like getCurrentDate().

  2. The UTC conversion problem seems to bite everyone (myself included). Here are some details. Not sure if dialectOptions: {useUTC: false }, has any function at all – just adding the typeCast method solved the problem for me.

      dialectOptions: {
        typeCast: function (field, next) { // for reading from database
          if (field.type === 'DATETIME') {
            return field.string()
          }
          return next()
      },
    

The result can be used for a new js Date object:

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);
    });

This works fine for me – but make sure to test thoroughly!

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement