実現したいこと
データベースにpostgresqlを使い、ORMにprismaを使っています。
データベースのtimezoneはUTCに設定しています。
prismaを使ったデータ保存、取得処理はバックエンド側のプログラムで行います。フロントエンドとバックエンドの連携はAPIを介して行います。フロントエンド側のtimezoneはjstです。
この状態で、DATE型の良い扱い方法がわかりません。
発生している問題・分からないこと
たとえば、registration_dateというDATE型のカラムをprismaのスキーマで定義します。
フロントエンドから渡ってくる値が、「2024-03-31」である場合、dbにそのままの形式で保存しようとするとエラーになるため、下記のように一旦、JSTをUTCに変換したDateオブジェクトを作成して値を保存しています。しかし、実際にDBに保存されたデータを見たところ「YYYY-MM-DD」形式で保存されおり、前日の日付が保存されていました。
一方、同カラムをprismaから取得すると2024-03-30T00:00:00.000Z といった形でYYYY-MM-DD形式ではなく、日付の後ろに自動で「T00:00:00.000Z」という日時データが付与されて取得されます。こちらもDBに保存された通り、前日の日付で取得されます。
フロントから送られてくる値はjstなので、prismaで保存する値もjstをutcに変換した日時で保存する必要があると思いますが、date型で定義すると日時はカットされて保存されているようです。この状態ですと、utcをjstに変換することができません。date型を使って、こうした齟齬が起きないようにするために何か良い方法はありますでしょうか。よく使われている手法などもあれば教えていただきたいです。よろしくお願いいたします。
該当のソースコード
// prismaの定義部分 registrationDate DateTime @map("registration_date") @db.Date
// 保存時 const registrationDate = new Date(input.registration_date + "T00:00:00+09:00");
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
わかりやすい方法が見つけられませんでした。
補足
特になし

回答1件
あなたの回答
tips
プレビュー