2016-04-13 16 views
1

Ich versuche, die Anzahl der LaserSheets schneiden pro Tag in einem Diagramm zu verwenden.Schienen 4: GROUP BY Datum mit Zeitzone

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 

ich in Probleme laufen lasse, weil der Rest von meiner Seite die Zeitzone in application.rb, aber die obige Abfrage gibt Ergebnisse gruppiert nach Datum in der UTC-Zeit eingestellt verwendet. Nach 17:00 Uhr PDT (UTC -0700) fange ich an, Ergebnisse für morgen zu sehen. Gibt es eine Möglichkeit, group("Date(cut_at)" in die Zeitzone der Anwendung zu konvertieren?

+1

Wenn Sie MySQL verwenden, um http://stackoverflow.com einen Blick/questions/28015068/how-to-group-nach-Datum-Accounting-für-Zeitzonen-und-dst –

Antwort

1

Wie der Kommentar oben schon sagt, müssen Sie das Datum mithilfe von SQL Ihre native Datenbank werfen:

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 

Siehe https://en.wikipedia.org/wiki/List_of_tz_database_time_zones für eine Liste der Datenbank Zeitzonen.

Für die .where('cut_at > ?', start_date.beginning_of_day) Anweisung, stellen Sie sicher, dass Ihre Zeitzone in Rails richtig eingestellt:

in application.rb:

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