在我的应用程序中,我有一个用于创建时间选择班次的表单。但是,视图中显示的时间错误了一个小时,数据库中显示的时间错误了两个小时。如果我选择start_time为10:00,stop_time为12:00,那么它在视图中显示为9:00-11:00,在控制台检查时显示为08:00-10:00。
我希望时间与系统时间相对应。输入时间。现在控制台给出正确的时间。我很困惑。
到底是什么错了,我怎么解决这个问题?
我使用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]
这可能是一个快速修复:在选择框中添加不同的名称,使用正确的时区,但让数据库将其保存在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
来编辑值,以自定义日期的显示方式。