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