🐈
1日1回ボーナス付与みたいな当日1回の日付処理Prismaでやりたい
はじめに
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