Sequelize.js Sequelize将UTC时间转换为错误的本地区域

Sequelize.js Sequelize将UTC时间转换为错误的本地区域,sequelize.js,Sequelize.js,我有一个以UTC时区存储datetime的表。它存储在PostgreSQL中。表中的数据未转换为任何需要的分区。但是,当我使用findAll方法进行查询时,它返回的结果是时区+5而不是-5(这是正确的服务器区域)。我将默认值useuUTC保留为true,而没有设置true或false,因为true是默认值。以下是一个例子: 数据库记录“2020-10-09T03:49:28.652Z” 续集响应“2020-10-09T08:49:28.652Z” 预期响应“2020-10-09T22:49:28

我有一个以UTC时区存储datetime的表。它存储在PostgreSQL中。表中的数据未转换为任何需要的分区。但是,当我使用
findAll
方法进行查询时,它返回的结果是时区+5而不是-5(这是正确的服务器区域)。我将默认值
useuUTC
保留为
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中运行的

我担心Sequalize使用的是用户时区而不是服务器时区。此外,在夏令时,此时区可能不正确

上面的sequelize和渲染功能有什么好的修复方法吗

编辑:

我从日志中添加了
findAll
raw 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;
捕获日期\时间是包含UTC日期和时间的日期列。 另一个原始SELECT查询现在在提供UTC datetime时工作

此原始选择查询也不起作用。在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将使用运行它的系统的时区,并将返回的日期转换为该时区格式。如果要强制Sequelize使用UTC日期(而不遵守DST),则需要在创建Sequelize连接时指定时区选项

const instance=new Sequelize(
数据库名,
用户名,
用户密码,
{
主机:数据库主机,
方言:“postgres”,
//在此处指定使用UTC和时区
选择:{
useUTC:true,//告诉驾驶员您要使用UTC
时区:'Etc/GMT0',//这对我和mariadb都适用
},
时区:'Etc/GMT0',//github问题表明这里的TZ用于postgres
}
);

有关更多信息,请参阅此Github问题:

不幸的是,当我按原样使用代码时,代码无法正常工作。我是否需要将第二个时区值更改为
Etc/GMT-5
?@wondim您正在为客户端设置时区,因此它将取决于您希望结果的格式。可以将UTC转换为本地UTC,只要我使用不同的库获得未修改的UTC。问题是,目前尚不清楚sequelize期待和返回的是什么。例如,当我在两次之间查询数据时,PgAdmin返回多条记录,但sequelize返回0。这意味着,它仍然在两个范围之间转换时间戳。这是我的问题。我不希望sequelize将日期更改为任何格式。@wondim您可能还需要包括您的查询-您确定创建的条件正确吗?我已在“编辑”下添加了一个在我的问题中仍然不起作用的查询。“在日期之间选择”现在起作用了。
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;