【问题标题】:TimeZone Select field in Ruby on RailsRuby on Rails 中的时区选择字段
【发布时间】:2011-04-01 23:35:56
【问题描述】:
我想输出其中一个选择字段供用户选择他们的时区。我的用户模型将时区保存为以秒为单位的整数。但如果不切实际,我可以改变它。
类似这样的:
<select>
...
<option value="x">+9:00 (Darwin, Australia)</option>
<option value="x">+10:00 (Sydney, Australia)</option>
...
</select>
我看到 Ruby on Rails 中有一个时间类...谁能指出我正确的方向?
【问题讨论】:
标签:
ruby-on-rails
user-interface
timezone
【解决方案1】:
您可以将时区存储为字符串。
def self.up
add_column :users, :time_zone, :string, :limit => 255, :default => "UTC"
end
使用它来显示选择框
<%= f.time_zone_select :time_zone %>
【解决方案2】:
timezones_diff_and_name = []
TZInfo::Timezone.all_linked_zones.each do |tz|
timezones_diff_and_name << {tz.name => tz.current_period.utc_total_offset / (60 * 60)}
end
sorted_timezones = timezones_diff_and_name.sort_by { |timezone| timezone.values[0] }
@timezones = {}
sorted_timezones.each do |tz|
diff = tz.values[0]
name = tz.keys[0]
@timezones["(GMT#{diff > 0 ? '+':''}#{diff.to_s}h) #{name}"] = name
end
谁有更好/更清洁的解决方案?我要睡觉了:)