2016-07-29 71 views
1

我正在使用time_zone_select来保存用户时区。如何在Ruby on Rails中显示时区偏移量?

  <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 

offset这是视图模板,但我不能够操纵时区,因为它存储为一个字符串。

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

有人可以指导我,如何显示带偏移量的时区?

回答

2

你可以把ActiveSupport::TimeZoneActiveSupport::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对象,这不是你想要的。你可以看到detailed implementation on Github

稍有关系,如果您想知道为什么可以将这个模块当作数组来对待,那是因为它实现了[]()方法。

+0

非常感谢。奇迹般有效。完善。我删除了to_s,并在完全阅读完答案后,将其重新输入。完美的完整答案。 – LovingRails