我必须显示在过去的30天里每天有多少次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调用。数据库中的API CALL与时间2012-12-14 05:00:00一起存储(因为它在格林尼治标准时间,所以它增加了8个小时)。
现在对于那个用户来说,如果我去查看我的日常用法,用我做的查询,它会显示我的api调用不是在2012年12月14日21:00:00进行的,因为在数据库它的存储为2012-12-14 05:00:00,对于用户来说,api的使用情况将显示他在第二天做了api调用,他会认为系统工作不正常。
因此,我怎么能根据用户时区对基于数据库时区的api调用进行分组?
是的,我知道时间.zone和我知道使用红宝石分组记录,但离开数据库引擎进行分组更有效,所以我真正想要的是一个很好的方式来处理时区,同时让引擎做复杂的操作。 – rorra