使用 Typeorm 从 NestJS 检索时间与 Mysql DB 上的记录不匹配

问题描述 投票:0回答:1

我在本地 matchine 上使用带有 Typeform 的 NestJs 来检索 Mysql DB 上的 Updated_at 和created_at。 在数据库上,记录显然存储在 UTC 中,但是在使用 find() 函数检索它之后。正如我在下面解释的那样,它已经再次转换为 UTC。正如 No.3 Nestjs(或 Typeorm)决定再次从 DB 转换时间。

  1. 我的时间(GMT+7):2024-04-13 12:00:00
  2. 数据库节省时间:2024-04-13 05:00:00
  3. find()的时间:2024-04-12 22:00:00

这是我的实体

@Entity('designs')
export class DesignEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @OneToOne(() => ProjectEntity, (project) => project.design)
  @JoinColumn()
  project: ProjectEntity;

  @Column({ type: 'json', nullable: true })
  landData: any;

  @Column({ type: 'json', nullable: true })
  settingData: any;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;

  @DeleteDateColumn()
  deletedAt: Date;
}

这是我的记录检索代码

const design = await this.designService.findOne({
  where: {
    project: {
      id: proj.id
    }
  }
});
console.log(design.updatedAt)
node.js nestjs typeorm
1个回答
0
投票

原来,我需要设置 Typeorm 时区,所以它以 UTC 处理检索值。

在app.module.ts中

@Module({
  imports: [
    TypeOrmModule.forRootAsync({
      imports: [DatabaseConfigModule],
      useFactory: (databaseConfigService: DatabaseConfigService) => ({
        type: 'mysql',
        host: databaseConfigService.DB_HOST,
        port: databaseConfigService.DB_PORT,
        username: databaseConfigService.DB_USERNAME,
        password: databaseConfigService.DB_PASSWORD,
        database: databaseConfigService.DB_NAME,
        timezone: "UTC", // <- HERE
        logging: false,
        namingStrategy: new SnakeNamingStrategy(),
        entities: ['dist/**/*.entity.js'],
        synchronize: true,
      }),
      inject: [DatabaseConfigService],
    }),
  ],
  controllers: [],
  providers: [],
})
© www.soinside.com 2019 - 2024. All rights reserved.