Open2
Date, DateTimeの取り扱いについて
Date型 (YYYY-MM-DD)
フロントエンド
結論
渡すタイミング(APIクライアントレベル)で、UTCの0時に設定しAPIを叩く。
つまりAPIクライアントを呼び出す際に、日付け(YYYY-MM-DD)を保証できれば正常に動く。
理由
タイムゾーンによって日付がずれるのを防ぐため。
1月2日という情報が欲しい場合、1月2日の0時のDateを作成する → デバイスのタイムゾーンがJSTだった場合、DBはUTCで時間を管理しているため、-9時間の差が生じて、1月1日の15時になって1日のずれが生じてしまう。
バックエンド
受け取ったDateをタイムゾーンを考慮することなく扱える
DateTime型
結論
ユーザーのタイムゾーンに応じた時間を扱えば良い。どこのタイムゾーンであっても、UTCに変換してDBに保存する。
ユーザーに返却してユーザーのタイムゾーンに合わせて変換する。
例
- APIにDate(2022年1月1日10時30分 JST)をPOSTする(JSであれば、Date型はISO Stringに変換される)
- DBに(2022年1月1日1時30分 UTC)で保存される
- レスポンスを返す(2022年1月1日1時30分 UTC)
- タイムゾーンによって変換される、日本の場合(2022年1月1日10時30分 JST)