如何在RubyonRails中显示时区偏移



我使用time_zone_select来保存用户时区。

          <div class="row">
            <div class="panel panel-primary">
              <div class="panel-heading">
                <%= f.label :time_zone, "TimeZone*" %>
              </div>  
              <div class="panel-body">   
                <%= f.time_zone_select :time_zone, nil, {}, { :class => 'form-control' } %>
              </div>
            </div>
          </div>

用户时区正在字符串中成功保存。

>> userp.time_zone
=> "Chennai"

现在,当我显示用户时区时,我想像这个一样显示时区偏移

(GMT+05:30) Chennai

这是视图模板,但我无法操作时区,因为它存储为字符串。

      <div>
        <small>
        <i class="fa fa-clock-o" aria-hidden="true"></i>
        <span style="padding-left:1px">TimeZone:</span>            
        <%= @user.time_zone %>
        </small>
      </div>  

有人能指导我,如何用偏移量显示时区吗?

您可以将ActiveSupport::TimeZone视为具有ActiveSupport::TimeZone[named_zone]的数组,例如:

  <div>
    <small>
    <i class="fa fa-clock-o" aria-hidden="true"></i>
    <span style="padding-left:1px">TimeZone:</span>            
    <%= ActiveSupport::TimeZone[@user.time_zone].to_s %> <%= @user.time_zone %>
    </small>
  </div>  

您可以在Rails控制台中测试它:

[6] pry(main)> ActiveSupport::TimeZone["Chennai"].to_s
=> "(GMT+05:30) Chennai"

请注意,如果你不使用#to_s,你会得到TimeZone对象,这不是你想要的。您可以在Github上看到详细的实现。

稍微相关,如果你想知道为什么这个模块可以被视为一个数组,那是因为它实现了[]()方法。

相关内容

  • 没有找到相关文章