[英]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
。 如何在東部時間(數據庫時區)獲得它?
我不知道像 getCurrentDate() 這樣的 sequelize 方法。
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.