我有一个Postgres database和一个nodeJS应用程序(为了完整起见,我使用NestJS框架). 我需要有关时区问题的帮助.
这是我存储博客帖子的表格:
create table if not exists public.posts
(
id serial constraint "PK_40808690ebab9150a6558c0f82c" primary key,
created_at timestamp default now() not null,
last_updated_at timestamp default now(),
title varchar(256),
pub_date timestamp,
...
)
首先,我想查询所有帖子的最新日期:
select max(pub_date)::date from posts;
-> 2023-11-05
然后,我想查询该特定日期的所有博客帖子:
在Postgres CLI内,以下查询
select * from daily where pub_date::date = '2023-11-05'::date;
将返回已于2023-11-05发布的所有帖子:
然而,当我从基于NodeJS的后端执行查询时,使用第一个查询的返回值,并将其作为参数传递给第二个查询,它将不会按预期工作.
在后端内部传递第一个查询的结果将返回与前一天不同的日期:
const sql = 'select max(pub_date)::date from posts';
const d = await this.repository.query(sql);
console.log('D', d);
这将收到一个显示预期日期前一天的日期(或正好是预期日期的前1小时23分钟):
D [ { max: 2023-11-04T23:00:00.000Z } ]
当我使用该值执行上面的另一个查询以检索该特定日期的所有帖子时,它不会工作,因为它查询的是2023-11-05=2023-11-04之前一天的帖子
我想这和某种奇怪的时区魔法有关.
使用PostgreSQL CLI(或任何数据库工具,如pgAdmin)将返回正确的值.我的NodeJS后端将返回错误的日期.我使用带有postgreSQL扩展名的TypeORM.
我怎么才能解决这个问题呢?