【问题标题】:Rails - Date time select in specified time zoneRails - 在指定时区选择日期时间
【发布时间】:2011-09-08 23:20:42
【问题描述】:

我正在为一个巡回演唱会网站开发一个应用程序,该网站的所有时间(公告时间、打折开始时间和活动开始时间)都是每个特定场地所在时区的本地时间。我让用户在适用的情况下输入日期/时间并运行 before_filter 来设置适当的时区,以便所有内容都以 UTC 格式存储在数据库中。对于“新”表单以及在索引和显示操作中显示时间,完全没有问题。当数据从数据库中取回并进入视图时,我使用 in_time_zone 来根据特定场所进行调整。

唯一的问题是在编辑表单上。日期/时间选择以 UTC 显示数据。当我在网站上工作时,我会在精神上进行调整,但对其他人来说却是令人困惑的。我想做一些类似的事情:

<%= f.datetime_select :start_datetime.in_time_zone(@event.time_zone) %>

或者,在控制器中:

def edit
  @performance = Performance.find(params[:id])
  @event = @performance.event
  @performance.start_datetime = @performance.start_datetime.in_time_zone(@event.time_zone)
end

那么简单地说,<%= f.datetime_select :start_datetime %>

不幸的是,我还没有找到正确的方法来做到这一点。你有什么值得一试的想法吗?

非常感谢。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 actionview actionviewhelper


    【解决方案1】:

    你可以使用默认的datetime_select方法,如下:

    %br
    = f.label :req_sess_start, "Session starts at"
    = f.datetime_select(:req_sess_start, :start_year => 2010, :ampm => true, :default => 0.days.from_now.in_time_zone(@timezone))
    

    由于显示的默认值,客户会假设必须在他/她的本地时区输入时间,但是... 这个值实际上是你应用程序的默认时区(如 application.rb 中提供的,默认为 UTC)。 因此,您需要一些服务器端编码才能将其转换为正确的值。

    【讨论】:

      【解决方案2】:

      我不确定我是否理解您想要做什么,但由于您存储的是@event.time_zone,您可以添加

      :default => start_time.in_time_zone(@event.time_zone)
      

      到您的 datetime_select 表单字段。

      【讨论】:

        【解决方案3】:

        这样的事情怎么样:

        # change PST to correct zone abbrev.
        new_zone = ActiveSupport::TimeZone.new("PST")
        @performance.start_datetime = @performance.start_datetime.in_time_zone(new_zone)
        

        【讨论】:

          【解决方案4】:

          我刚刚注意到这是一篇旧帖子,但是: 如果我是你,我会使用虚拟属性来表示场地的日期时间。例如,您可以为性能添加一个名为adjusted_start_time 的属性。

          【讨论】:

            猜你喜欢
            • 2016-12-30
            • 1970-01-01
            • 2013-08-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-13
            • 2012-10-27
            • 1970-01-01
            相关资源
            最近更新 更多