railsで作ったAPIに特定の日付のものをフェッチしてくるリクエストを処理する実装を行なっています。
クライアント側からdate = "2021-09-03 15:00:00 +0000"
のようなリクエストが来たときにうまく正しい日付で検索をすることができません。このdateは2021-09-04を意味していますが、UTC時間での処理のため、9時間前の時間がリクエストとして投げられます。ちなみに検索をかけるカラムはcreated_atやupdated_atのようなデフォルトのものではなく、独自で用意したregstered_atというカラムでデータ型はdateTime型にしています。
これをrails側では下記のように処理しています。
date = Time.parse(params[:date]).to_date.to_time
Dateに変換し、その後にtimeに変換している理由ですが、例えばクライアント側からdate = "2021-09-03 18:30:20 +0000"
のように0時ぴったりではないパラメーターが渡されることもあるからです。DBに入っている日付の値は全てクライアント側から0時のものが渡されます。それゆえにDBにはその9時間前の15:00:00のものが保存されているのので、15:00:00の時間で検索をかけなければいけません。(このカラムのデータ型をdateTimeではなく、Dateにすればいいだけかもしれませんが、そうしてもdateの値が一日前の値になってしまい、不整合が生じます。)
しかしdate = Time.parse(params[:date]).to_date.to_time
でのdateの時間部分は15:00:00ではなく、00:00:00になってしまいます。サーバーサイドで時間のずれを修正する必要があるのですが、どのように修正を行えばいいのでしょうか??
試したこと
カラムのデータ型をdateTimeからDateに変更したことで
date = Time.parse(params[:date]).to_date
としたdateでも検索が行えるようになりましたが、1日前の日付が表示されてしまい、不整合が起こっています。date = Time.parse(params[:date]).to_date.tommorow
とすれば期待通りに動きましたが、 tommorowとするのではなく、もっといい解決方法があるのではないかなと思いました
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/04 13:28
2021/09/04 14:01