在我的应用程序中,我有一个用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]
答案 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
编辑值来自定义日期的显示方式。