2016-04-13 13 views
1

グラフで使用する1日のカット枚数を取得しようとしています。Rails 4:GROUP BY日付とタイムゾーン

pages_controller.rb:

start_date = 7.days.ago 
recent_cut_stats = LaserSheet.where('cut_at IS NOT NULL') 
          .where('cut_at > ?', start_date.beginning_of_day) 
          .group("DATE(cut_at)") 
          .count 

私のサイトの残りの部分はapplication.rbに設定されたタイムゾーンを使用しますが、上記のクエリは、UTC時刻に日付でグループ化された結果を返すので、私は問題に実行しています。 PDT(UTC-0700)午後5時以降、私は明日の結果を見るようになります。 group("Date(cut_at)"をアプリケーションのタイムゾーンに変換する方法はありますか?

+1

MySQLを使用している場合は、http://stackoverflow.comを見てみましょう/ questions/28015068/how-to-group-by-date-accounting-for-timezones-and-dst –

答えて

1

上記のコメントは、SQLネイティブデータベースを使用して日付をキャストする必要があります、通り:

start_date = 7.days.ago 
recent_cut_stats = LaserSheet.where('cut_at IS NOT NULL') 
          .where('cut_at > ?', start_date.beginning_of_day) 
          .group("DATE(CONVERT_TZ(cut_at, 'UTC','<name of time zone>'))") 
          .count 

は、データベースのタイムゾーンのリストについては、https://en.wikipedia.org/wiki/List_of_tz_database_time_zonesを参照してください。

.where('cut_at > ?', start_date.beginning_of_day)声明について、あなたのタイムゾーンが正しくレールに設定されていることを確認します

application.rbに:

config.time_zone = '<name of time zone>'