我试图将每天削减的LaserSheets数量用于图表中。
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时间按日期分组的结果。在太平洋时间下午5点(UTC -0700)之后,我开始看到明天的结果。有没有办法将group("Date(cut_at)"
转换为应用程序的时区?
答案 0 :(得分: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)
语句,请确保在Rails中正确设置了您的时区:
application.rb
中的:
config.time_zone = '<name of time zone>'
答案 1 :(得分:0)
.group("DATE(created_at at time zone 'utc' at time zone 'Europe/Amsterdam')").count
时区名称: https://popsql.com/learn-sql/postgresql/how-to-convert-utc-to-local-time-zone-in-postgresql/