Prisma 存储日期的最佳实践
问题
业务中常常会需要存储 YYYY-MM-DD
这样的日期,使用 Prisma 时的按常理会在 schema.prisma
中这样定义。
model Model {
date DateTime @db.Date
}
但是这却会有很大的问题,PrismaClient 的 DateTime
类型只支持传入一个 Date
对象或者 ISO 8601
格式的字符串,如果传入 Date
对象,Prisma 在转化为 SQL 时会自动调用 toISOString
方法,执行 SQL
之后日期的时区信息就被丢弃掉了。
例如 new Date('2022-09-01T00:00:00+08:00')
会被转换为 2022-08-31T16:00:00.000Z
,写入数据库后,日期就变成了 2022-08-31
。
最佳实践
将 YYYY-MM-DD
类型的日期定义为 Int
而不是 DateTime
model Model {
date Int
}
使用时
prisma.model.create({
data: {
date: 20220901
}
})