代码之家  ›  专栏  ›  技术社区  ›  Rimian

rubyonrails中的时区选择字段

  •  11
  • Rimian  · 技术社区  · 15 年前

    我想输出其中一个select字段供用户选择时区。我的用户模型将时区保存为以秒为单位的整数。但如果不可行的话我可以改变。

    像这样:

    <select>
      ...
      <option value="x">+9:00 (Darwin, Australia)</option>
      <option value="x">+10:00 (Sydney, Australia)</option>
      ...
    </select>
    

    我看到RubyonRails中有一个时间类。。。有人能给我指出正确的方向吗?

    2 回复  |  直到 8 年前
        1
  •  34
  •   Arslan Ali    8 年前

    可以将时区存储为字符串。

      def self.up
        add_column :users, :time_zone, :string, :limit => 255, :default => "UTC"
      end
    

    使用此选项可显示“选择”框

    <%= f.time_zone_select :time_zone %>
    
        2
  •  1
  •   tiagomatos    14 年前
    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
    

    推荐文章