我正在使用一个音乐会巡回网站的应用程序,该网站的所有时间(公告时间,销售开始时间和事件开始时间)均位于每个特定 field 的时区。我在适当的地方输入用户输入的日期/时间,然后运行before_filter设置适当的时区,以便所有内容都以UTC格式存储在数据库中。对于"new"表单,以及在索引和显示操作中显示时间,一点都没有问题。当数据从数据库中带出并进入 View 时,我使用in_time_zone根据特定场所进行调整。
唯一的问题是在编辑表单上。选择的日期/时间以UTC显示数据。当我在网站上工作时,我会进行心理调整,但对于其他人则感到困惑。我想按照以下方式做一些事情:<%= f.datetime_select :start_datetime.in_time_zone(@event.time_zone) %>
或者,在 Controller 中:
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 %>
。不幸的是,我还没有找到正确的方法来做到这一点。您有什么值得一试的想法吗?
非常感谢你。
最佳答案
您可以使用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)。
因此,您将需要一些服务器端编码才能将其转换为正确的值。
关于ruby-on-rails - Rails-在指定时区中选择日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246987/