【发布时间】:2022-11-24 02:00:40
【问题描述】:
默认情况下,任何存储在 postgres 中的日期/时间戳都是标准的 UTC。 Postgres 具有 DATE 列类型,它仅存储完整 timestamp 的日期部分。
将 typeorm 用于 postgres 并使用 repositories 时,日期将按原样获取。然而,当您使用这样的原始查询执行某些操作时:
const queryRunner = await this.connection.createQueryRunner();
await queryRunner.connect()
const response = await queryRunner.query('SELECT * FROM MY_VIEW WHERE AGE=23');
对于同一日期(仅)列,我收到类似这样的内容,其值为“1999-01-02”
{
name: 'mleko',
age : '23',
dob : '1999-01-01:T22:00:00:000Z',
address: 'xyz'
}
我不确定这种转换到底在哪里发生,可能是 typeorm 使用的底层驱动程序,但是,我如何告诉 typeorm 不要将已经在 UTC 中的日期再次转换为 UTC。
【问题讨论】:
-
该列的 PostgreSQL 数据类型是什么?
-
@LaurenzAlbe,这只是约会
-
这只是因为 javascript 具有如此弱的类型系统。 javascript 中没有“日期”类型(称为“日期”但不代表日期),大多数日期/时间库都没有引入。打字稿中可能有一个更成熟的图书馆。
-
@RichardHuxton,您认为有没有解决这个问题的解决方法而不解决不同的 orm?
-
1)这个“默认情况下,存储在 postgres 中的任何日期/时间戳都是标准的 UTC。”是错的。这仅适用于
timestamp with time zone。 2)date没有时区,所以有些东西将你的日期值变成了时间戳。
标签: postgresql typeorm