I am new with nestjs. How can I set columns that accepts Date format and dateTime format?
Not in both cases, the columns are two differents column, one accept Date and other dateTime.
I am new with nestjs. How can I set columns that accepts Date format and dateTime format?
Not in both cases, the columns are two differents column, one accept Date and other dateTime.
You can see the docs here that explains the @Column decorator. In @Column there is an option called type -> here is where you specify which type of date you want to store for that specific column.
More on column types here.
For example (using PostgreSQL):
@Column({ type: 'date' })
date_only: string;
@Column({ type: 'timestamptz' }) // Recommended
date_time_with_timezone: Date;
@Column({ type: 'timestamp' }) // Not recommended
date_time_without_timezone: Date;
Note that date_only
is of type string. See this issue for more information.
Moreover, automatic dates for certain events are possible:
@CreateDateColumn()
decorator.@UpdateDateColumn()
decorator.@DeleteDateColumn()
decorator.@CreateDateColumn()
created_at: Date; // Creation date
@UpdateDateColumn()
updated_at: Date; // Last updated date
@DeleteDateColumn()
deleted_at: Date; // Deletion date
timestamptz
too ;) –
Dacosta GraphQLTimestamp
for UNIX epoch or GraphQLDateTime
for UTC. You decide what best suits your needs since the input given to the scalar is always a Date
instance (timestamptz
). –
Waken How about ?
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
EDIT
You can find more info here
To add more to this ticket as DateTime was not even mentioned:
/**
* Start DateTime
*/
@Column({
type: 'datetime',
default: () => 'NOW()',
})
@Index()
start: string;
/**
* End DateTime
*/
@Column({
type: 'datetime',
nullable: true,
})
@Index()
end: string;
This is for those not wanting or needing to use
@CreateDateColumn()
@UpdateDateColumn()
start
and end
are of type string
and not Date
? –
Primeval type: 'datetime'
–
Unwitnessed This is how I do it. The name parameter represents the column name in the database. If you use the built in decorators it will handle updating the columns in without additional code.
@CreateDateColumn({ name: 'created_at'})
createdAt: Date;
@UpdateDateColumn({ name: 'updated_at' })
updatedAt: Date;
@DeleteDateColumn({ name: 'deleted_at' })
deletedAt: Date;
Just to complement... When creating and wanting the result to only display the date, use:
@CreateDateColumn({ type: "date" }) createdAt: Date | string;
If not specified, the time will also be included.
I could not get this to work in any way, seems to be a bug in the decorators or a misunderstanding how they should work (NestJS 10.3, TypeORM 0.3.17, Postgres 15). I used this workaround with hooks instead:
class SomeEntity {
@Column({
name: 'created_at',
type: 'timestamptz',
})
createdAt?: Date;
@Column({
name: 'updated_at',
type: 'timestamptz',
})
updatedAt?: Date;
@BeforeInsert()
protected setCreatedAt(): void {
this.createdAt = new Date();
}
@BeforeUpdate()
protected setUpdatedAt(): void {
this.updatedAt = new Date();
}
}
© 2022 - 2024 — McMap. All rights reserved.
type: 'date'
is a string - not a date object with the time set to 0. See github.com/typeorm/typeorm/issues/2176 – Dacosta