Rails 使用时区参数和夏令时强制执行日期时间偏移

Rails enforce a DateTime offset with a timezone param and DST

我刚刚遇到了一个 DateTime 字段的问题,该字段提交时带有错误的时区偏移量,我通常会观察到来自同一国家/地区的人提交的时区偏移量(多么令人惊讶......来自 Internet Explorer)。我想知道这是否与即将在 10 月底结束的 DST 相关联,并且某些浏览器可能对此有问题(尽管受影响的 DateTime 是在更改之前的 10 月 15 日左右)。

前端表单使用 bootstrap datetimepicker(其底层实现依赖于 momentJS)。这是激活选择器和字段的 JS 的一小段摘录,尽管我不确定它是否与此处相关

<div class="col-xs-4" id="appointment-time-start">
    <%= f.hidden_field :from %>
</div>
<script>
$('#appointment-time-start').datetimepicker({
        format: 'LT',
        defaultDate: "<%= model.from || (Time.now + 2.days) %>",
    });
</script>

为了避免这个问题,我要求用户也提交默认设置为巴黎时区的时区。

f.time_zone_select(:time_zone)

我应该如何使用这个时区来修改作为参数发送的其他日期?我有一个发送两个日期时间的简单约会表单,我需要修改它们以确保它们的偏移量与 time_zone 参数匹配(如果夏令时有效,则额外 +1)。

我也在想我是应该在控制器中做这个,还是直接在模型中做。我的控制器正在做通常的事情,我当前的模型看起来像(但现在我没有用 time_zone 做任何事情)

class Appointment
  include Mongoid::Document

  field :from, type: DateTime
  field :to, type: DateTime
  field :time_zone, default: 'Paris'

好吧,我在类似的问题上发现了 this answer...令我惊讶的是没有一个更简单的助手可以做到这一点 oO

def set_in_timezone(time, zone)
  Time.use_zone(zone) { time.to_datetime.change(offset: Time.zone.now.strftime("%z")) }
end

请注意,它仍然没有回答我是否应该在 model/controller 中这样做的问题。