適切なグラフを作成するために、過去 30 日間にユーザーが 1 日に行った API 呼び出しの数を表示する必要があります。これまでのところ、問題はありませんでした。データベースとシステムのタイムゾーンは UTC ですが、ほとんどのユーザーは太平洋時間 (GMT -8) を使用していることに注意してください。
使用日ごとにグループ化されたAPIの使用状況を取得するには、次のようなことができます
ApiCall.
where(user_id: @user.id).
where("requested_at > ?", Time.zone.now.to_date - 30.days).
group("date(requested_at)").
select("count(*) as qty, date(requested_at) as requested_at").all
ここでの問題は、カリフォルニアにいるユーザーの時間がイギリスにいるユーザーの時間と大きく異なることです。それが私が失敗しているところです。
2012 年 12 月 14 日 21:00:00 GMT -8 に、カリフォルニアにいるユーザーが API 呼び出しを行います。DB の API CALL は、時刻 2012-12-14 05:00:00 で保存されます (GMT であるため、8 時間が追加されます)。
そのユーザーについて、私が行ったクエリで毎日の使用状況を確認すると、2012 年 12 月 14 日の 21:00:00 に API 呼び出しが行われなかったことが示されます。 2012-12-14 05:00:00 であり、ユーザーの場合、API の使用は、その API 呼び出しを翌日に行ったことを示し、システムが正常に動作していないと考えます。
つまり、データベースのタイムゾーンではなく、ユーザーのタイムゾーンに基づいて API 呼び出しをグループ化するにはどうすればよいでしょうか?