首页 > 解决方案 > Typeorm 查找方法返回错误的时间戳时间

问题描述

所以,我使用的是 express + typeorm + postgresql,当我在数据库中保存一个实体时,时间戳列会获得正确的 UTC 日期,但是,当我从数据库中获取数据时,返回的每个时间戳都会增加 3 个小时。到底是怎么回事?为什么检索的日期与 DB 中的日期不完全相同?任何帮助都感激不尽。

标签: javascriptnode.jspostgresqlexpresstypeorm

解决方案


数据库和服务器的时区之间可能存在差异。要使其正常化,您可以将两者都设置为“UTC”时区并使用它。

PostgreSQL 的时区:

// get
show timezone;

// set
SET TIMEZONE='UTC';

服务器的时区:

// get
console.log(process.env.TZ)

// set
process.env.TZ = 'UTC'

另一种解决方案是对从数据库返回的数据使用typeorm's @Columndecorator API 的转换器方法。此方法将从数据库中获取数据作为输入,并将其转换后返回。

@Column({
    transformer: { 
        from(value: DatabaseType): EntityType,
        to(value: EntityType): DatabaseType 
    }
})
someDate: Date;

推荐阅读