如何在Rails表单中应用datetime_select上的时区



我有一个看起来像

的表单
= form.datetime_select :due_at
= form.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones

保存此对象时,我们需要它应用所选择的时区。例如,如果用户选择"03-01-2013 11:00"one_answers"中央时间(US &,我希望日期/时间(在本例中为11AM)为CST 11AM,而不是我们的应用程序默认时区"太平洋时间(US & &;加拿大)"。

这实际上是嵌套在另一个形式,所以我们不能简单地改变时间。Zone在控制器中使用一个around_filter。

我们正在努力寻找一个在夏令时也能工作的解决方案。

如果due_attime_zone都是单个模型的属性,那么您可以使用before_save钩子来确保due_at在被存储到数据库之前被编码在time_zone的时区。

class YourModel < ActiveRecord::Base
  before_save :apply_time_zone
  protected
  def apply_time_zone
    self.due_at = ActiveSupport::TimeZone[time_zone].parse "#{due_at_start.to_s(:db)} UTC"
  end
end

ActiveSupport::TimeZone[t].parse(s)s解析为时区t, .to_s(:db)将时间转换为UTC的字符串。

相关内容

  • 没有找到相关文章

最新更新