teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追記

2021/09/04 12:39

投稿

oeiqgfodgfhps
oeiqgfodgfhps

スコア35

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  railsで作ったAPIに特定の日付のものをフェッチしてくるリクエストを処理する実装を行なっています。
2
- クライアント側から`date = "2021-09-03 15:00:00 +0000"`のようなリクエストが来たときにうまく正しい日付で検索をすることができません。このdateは2021-09-04を意味していますが、UTC時間での処理のため、9時間前の時間がリクエストとして投げられます。
2
+ クライアント側から`date = "2021-09-03 15:00:00 +0000"`のようなリクエストが来たときにうまく正しい日付で検索をすることができません。このdateは2021-09-04を意味していますが、UTC時間での処理のため、9時間前の時間がリクエストとして投げられます。ちなみに検索をかけるカラムはcreated_atやupdated_atのようなデフォルトのものではなく、独自で用意したregstered_atというカラムでデータ型はdateTime型にしています。
3
3
  これをrails側では下記のように処理しています。
4
4
  `date = Time.parse(params[:date]).to_date.to_time`
5
5
  Dateに変換し、その後にtimeに変換している理由ですが、例えばクライアント側から`date = "2021-09-03 18:30:20 +0000"`のように0時ぴったりではないパラメーターが渡されることもあるからです。DBに入っている日付の値は全てクライアント側から0時のものが渡されます。それゆえにDBにはその9時間前の15:00:00のものが保存されているのので、15:00:00の時間で検索をかけなければいけません。(このカラムのデータ型をdateTimeではなく、Dateにすればいいだけかもしれませんが、そうしてもdateの値が一日前の値になってしまい、不整合が生じます。)