Search code examples
node.jsnestjstypeorm

Retrieved time from NestJS with Typeorm not matched with record on Mysql DB


I use NestJs with Typeform on local matchine to retrieve updated_at, and created_at that are on Mysql DB. On DB, records are clearly stored in UTC, but after retrieve it using find() function. It has already converted to UTC again as I explained below. As in No.3 Nestjs (or Typeorm) decide to convert time from DB again.

  1. My time (GMT+7): 2024-04-13 12:00:00
  2. Saved Time on DB: 2024-04-13 05:00:00
  3. Time from find(): 2024-04-12 22:00:00

Here is my entity

@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;
}

Here's my record retrieval code

const design = await this.designService.findOne({
  where: {
    project: {
      id: proj.id
    }
  }
});
console.log(design.updatedAt)

Solution

  • Turn out, I need to set Typeorm timezone, so it processes the retrieval value in UTC.

    in 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: [],
    })