Rails形式和时区

时间:2016-09-07 09:07:23

标签: ruby-on-rails sqlite timezone

在我的应用程序中,我有一个用time.select创建班次的表单。但是,视图中显示的时间错误一个小时,数据库中显示的时间错误了两个小时。如果我选择start_time为10:00,stop_time为12:00,则在视图中显示为9:00-11:00,当我在登录控制台时显示为08:00-10:00。

我希望时间与系统时间相对应。在控制台中键入Time.now可以提供正确的时间。我很困惑。

究竟出了什么问题?我该如何解决这个问题?

我使用rails 5和sqlite数据库。

形式:

  <div class="field">
    <%= f.label :Start %>
    <%= f.time_select :start_time, {minute_step: 30} %>
  </div>
  <br>
    <div class="field">
    <%= f.label :Stop %>
    <%= f.time_select :stop_time, {minute_step: 30} %>
  </div>

application.rb中

config.time_zone = 'Stockholm'
config.active_record.default_timezone = :local
config.active_record.time_zone_aware_types = [:datetime, :time]

1 个答案:

答案 0 :(得分:0)

这可能是一个快速修复: 在选择框中添加不同的名称,使用正确的时区,但让数据库将其保存在0时区。

控制器:

@start_times_correct = Model.pluck(:start_time).map{|value| [value.in_time_zone('Stockholm'), value]}

查看:

= f.select(:start_time, options_for_select(@start_times_correct))

注意:这适用于rails 4,我希望这也可以在rails 5中使用。您还可以使用strftime编辑值来自定义日期的显示方式。