【问题标题】: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
    

    谁有更好/更清洁的解决方案?我要睡觉了:)

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 2010-11-01
      • 1970-01-01
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 1970-01-01
      相关资源
      最近更新 更多