2013-04-09 50 views
8

我跟随了Ryan Bate的railscast#106 http://railscasts.com/episodes/106-time-zones-revised,它为用户模型添加了time_zone字符串。该字符串是从下拉:ActiveSupport :: TimeZone偏移字符串列表

= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones 

我想查询所有共享一个共同的时区偏移量用户的(这样我就可以在特定的时间在每天发送一封电子邮件)。

User.where(:time_zone => ['Guadalajara','Central America','Mexico City', 'Monterrey', 'Saskatchewan']) 

我一直无法获得特定偏移量的时区名称列表。我一直在修补TzInfo和ActiveSupport :: TimeZone.zones_map,并取得了有限的成功。我觉得zone_map应该能够满足我的需求,但是我一直无法从中获得所需的数据(尽管我在这里看到它!)。

我在这里采取了错误的做法?我想我可以将GMT偏移量存储在用户身上,并以这种方式查询?

我的google-fu让我失望。

回答

15

我已经想通了 -

tz_names = ActiveSupport::TimeZone.zones_map.values.collect{|z| z.name if z.utc_offset == offset}.compact 
+2

很不错的! 顺便说一句,没有必要在'紧凑!因为你将它分配给一个变量,所以它可以只是'紧凑' – MTarantini 2016-03-22 15:03:19

+0

或者查看5.1+的映射http://api.rubyonrails.org/v5.1/classes/ActiveSupport/TimeZone.html – 2017-09-30 02:39:50

相关问题