【发布时间】:2020-10-09 13:28:44
【问题描述】:
我有一个表,它在 UTC 区域中存储带有时区的日期时间。它存储在 PostgreSQL 中。表中的数据未转换为任何所需的区域。但是,当我使用findAll 方法查询时,它返回的结果为时区+5 而不是-5(这是正确的服务器区域)。我将默认的useUTC 保留为true,而没有设置true 或false,因为true 是默认值。下面是一个例子:
数据库记录"2020-10-09T03:49:28.652Z"
后续回复"2020-10-09T08:49:28.652Z"
预期回复"2020-10-09T22:49:28.652Z"
我目前正在使用此解决方法。 注意:这是在 ExtJS 6.2 Chart axes renderer function 中运行的。
renderer: function (axis, date_str, layoutContext, lastLabelText) {
var d = new Date(date_str.replace('Z', '').replace('T', ' ') + ' UTC');
d.setHours(d.getHours() - 5);
return Ext.Date.format(new Date(d), 'H:i:s');
我担心 Sequlize 使用用户时区而不是服务器时区。此外,在夏令时期间,此时区可能不正确。
上面的sequelize和render函数有什么好的修复方法吗?
编辑:
我已从日志中添加了 findAll 原始 SQL 查询:
SELECT "id", "capture_datetime", "pco2", "createdAt", "updatedAt" FROM "bos_pco2" AS "bos_pco2" WHERE "bos_pco2"."capture_datetime" IS NOT NULL ORDER BY "bos_pco2"."capture_datetime" DESC LIMIT 30;
捕获 date_time 是一个包含 UTC 日期和时间的 Date 列。 当提供 UTC 日期时间时,另一个原始 SELECT 查询现在可以工作。
这个原始选择查询也不起作用。在 PG Admin 中,我得到了一个结果,但 sequelize 没有结果。
SELECT * FROM bos_chl_a_pc_pe WHERE capture_datetime
BETWEEN '2020-10-10T22:41:44.000Z'::TIMESTAMP and '2020-10-11T00:41:44.045Z'::TIMESTAMP
ORDER BY capture_datetime;
【问题讨论】:
标签: sequelize.js