我必須顯示在過去的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