gpt4 book ai didi

ruby-on-rails - 如何在 Rails 表单中的 datetime_select 上应用时区

转载 作者:行者123 更新时间:2023-12-03 12:18:51 24 4
gpt4 key购买 nike

我有一个看起来像的表格

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

保存此对象后,我们需要它来应用所选的时区。例如,如果用户选择“03-01-2013 11:00”和“中部时间(美国和加拿大)”,我希望日期/时间(在本例中为上午 11 点)为上午 11 点 CST 而不是我们的应用程序默认时区“太平洋时间(美国和加拿大)”。

这实际上嵌套在另一个表单中,所以我们不能简单地用 around_filter 更改 Controller 中的 Time.zone。我们正试图找出一种在夏令时也能正常工作的解决方案。

最佳答案

如果 due_attime_zone 都是单个模型的属性,那么您可以使用 before_save 钩子(Hook)来确保 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 格式的字符串。

关于ruby-on-rails - 如何在 Rails 表单中的 datetime_select 上应用时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15167716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com