簡體   English   中英

如何在 sequelize 中使用數據庫時區獲取當前日期/時間

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

我需要根據數據庫時區(不是我的本地時區,也不是默認的 UTC 時區),使用 Sequelize 獲取當前時間。 是否有 Sequelize 方法可以做到這一點?

我的數據庫是東部時間,當我直接查詢數據庫時SELECT CURRENT_TIMESTAMP; 它返回東部時間的日期/時間(這是正確的)。

但是當我在 Node 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 如何在東部時間(數據庫時區)獲得它?

  1. 我不知道像 getCurrentDate() 這樣的 sequelize 方法。

  2. UTC 轉換問題似乎困擾着所有人(包括我自己)。 這里有一些細節。 不確定dialectOptions: {useUTC: false },是否有任何function - 只需添加 typeCast 方法就可以解決我的問題。

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

結果可以用於新的 js 日期 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);
    });

這對我來說很好——但一定要徹底測試!

像這樣在您的dialectOptions添加useUTC屬性

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM