提问人:Janne 提问时间:10/9/2023 更新时间:10/11/2023 访问量:364
Javascript 和 PostgreSQL 之间的 Drizzle ORM 日期转换问题?
Drizzle ORM date conversion problem between Javascript and PostgreSQL?
问:
前提条件:我的时区是 GMT+3
我有一个模型毛毛雨模型
export const events = pgTable('events', {
id: serial('id').primaryKey(),
name: varchar('name', {length: 256}).notNull(),
date: date('date').notNull(),
});
我已将记录插入数据库
# insert into events (name, date) values ('Foobar', '2023-03-30');
当我查询它时,它在结果关系中正确显示
id | name | date
----+---------+------------
100 | Foobar | 2023-03-30
现在,如果我运行以下代码
const foo = await db.query.events.findFirst({
where: eq(events.id, 100),
});
console.log(foo.date);
我得到
2023-03-30T00:00:00.000Z
但是,如果我通过 drizzle-kit Studio 查看数据库,它会显示日期为
2023-03-29T21:00:00.000Z
而且,如果我在另一个查询中使用 foo 的日期值
await db.query.events.findFirst({
where: lt(events.date, foo.date),
orderBy: desc(races.date),
});
我得到的记录与我在 foo 中已有的记录相同,而不是日期更早的记录 - 可能是因为我的过滤器值是 2023-03-30,但数据库认为它是 2023-03-29。我的分析是,lt(小于)比较苹果和橙子。但我不明白为什么?我应该怎么做才能解决它?
我是否需要将数据库的时区设置为 UTC,如果设置为 UTC,如何设置?或者有其他方法可以解决这个问题?
答:
0赞
Janne
10/11/2023
#1
解决方法是将日期列的定义更改为
date: date("date", {mode: "date"}).notNull()
即将模式添加为
“日期”
评论
date
date
show timezone;
date
show timezone;
Europe/Helsinki
date
select '2023-10-09'::date; 10/09/2023
datetime/timestamp
date: date("date", {mode: "date"}).notNull()