Prismaで日付データを扱う

RDBMSを使うとなると、created_atなどで日付・時間データを扱うことが多いのではと思ったので、ちょっと試してみました。

カラム定義には、DateTimeを指定

テーブルやカラムの定義は、schema.prismaファイルに書きます。

日付・時間データを扱うカラムを足す場合は、DateTime型を指定します。

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  published_at DateTime?
}

レコード作成時の日時を設定したい場合

Prismaでは、@defaultでデフォルト値を指定できます。

日時データで「今」を設定したい場合は、now()を入れましょう。

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  published_at DateTime?
  created_at DateTime @default(now())
}

INSERT / UPDATE / WHEREではDate型で値を指定する

データを入れる時は、Date型で値を渡します。moment / dayjsなどを使う場合、toDate()などでDateオブジェクトに変換しましょう。

    await prisma.post.create({
        data: {
            title: faker.lorem.word(),
            published_at: dayjs().add(1, 'day').toDate(),
            author: {
                create: {
                    name: faker.name.firstName(),
                    email: faker.internet.email(),
                }
            }
        }
    })

検索でも同様です。

lte, lt, equals, gt, gteなどで範囲指定ができます。

   const users = await prisma.user.findMany({
        where: {
            posts: {
                every: {
                    published_at: {
                        lte: dayjs().add(1, 'day').toDate(),
                        gte: dayjs().subtract(1, 'day').toDate(),
                    }
                }
            }
        },
        include: {
            posts: true,
        },
    })

参考記事

Comment