🐈

1日1回ボーナス付与みたいな当日1回の日付処理Prismaでやりたい

2023/04/19に公開

はじめに

1日1回ボーナス付与みたいな処理をしたいときに日付処理にハマった。
データベースでは、UTC時刻(Offset情報なし)で保存している。
一方で、日付判定は日本時間00:00:00~23:59:59としたい。

日付の挙動を確認する

  const now = new Date() // 現在の日時の取得
  console.log(`now : ${now}`)
  console.log(`startOfToday : ${new Date(new Date().setHours(0, 0, 0))}`)
  const startOfYesterday = new Date(
    now.getFullYear(),
    now.getMonth(),
    now.getDate() - 1
  )
  console.log(`startOfYesterday : ${startOfYesterday}`)
  console.log(`endOfYesterday : ${new Date(startOfYesterday.setHours(23, 59, 59))}`)

以下、出力の結果

Prisma クエリ

日本時間の当日中に該当レコードをヒットさせてい場合のWhere句のクエリ。

    where: {
      created_at: {
        gte: new Date(new Date().setHours(0, 0, 0)),
      },
    }

あとはクエリでヒットした場合はreturn,しなかった場合に処理するみたいなコード記述する。

Discussion