【发布时间】:2020-12-12 18:27:14
【问题描述】:
当我执行一个将数据作为替换传递的查询时,日期未在查询中设置为 UTC-Date。
我的代码:
let startInterval = moment('2020-12-09').toDate();
db.query(`
SELECT kv.kpiId
FROM kpiValues kv
WHERE kv.insertDate >= :startInterval
`, {
type: QueryTypes.SELECT,
replacements: {
startInterval: startInterval,
}
}).catch(next)
打印 startInterval 变量会得到2020-12-08T23:00:00.000Z。
当我输出查询时,它会显示
SELECT kv.kpiId
FROM kpiValues kv
WHERE kv.insertDate >= '2020-12-09 00:00:00.000'
该列是续集日期列(SQL 日期时间)。查询中的值是我的本地时间 - 但数据库应该只使用 UTC 值 - 所以我希望它在查询中使用2020-12-08T23:00:00.000。我能做什么?
续集连接:
const sequelize = new Sequelize(dbName, dbUser, dbPassword, {
host: Settings.dbUrl,
port: dbPort,
dialect: 'mariadb',
dialectOptions: {},
timezone: '+00:00',
pool: {
max: 70,
min: 5,
acquire: 30000
},
define: {
timestamps: false,
freezeTableName: true
},
logging: true // Remove property when all statements that are executed should be printed
});
【问题讨论】:
-
你使用什么 DBMS?
-
@Anatoly mariaDB
-
在 MariaDB 日期时间中存储
as is没有时区信息。见mariadb.com/kb/en/datetime/#time-zones -
@Anatoly 有什么可以做的吗? sequelize 不会在原始 SELECT 查询中处理这个问题吗?在 sequelize 插入和更新函数中,它自动使用 UTC 时间
-
你能把 UTC 日期时间作为字符串传递吗?
标签: javascript node.js orm sequelize.js