嗨!所以,我有一个rails应用,它在创建出价表单中有一个<%= f.datetime_select :ends_at %>
字段。我希望开始时间是用户的当前时间,但允许其他用户在创建此出价后在自己的时区中查看ends_at。
所以我需要两个方面的帮助:
* 1。如何设置选择下拉菜单以显示用户当前时区的Time.now时间,以及是否使用Time.now或Time.zone.now?
* 2。如何根据查看记录的用户时区更改ends_at?
真的很感激! 谢谢:))
答案 0 :(得分:1)
你有两个选择。
在application.rb
文件中设置应用程序的时区。这将强制所有时间都在该时区。 这仅适用于您的用户位于单个时区的情况。
存储用户时区,并使用rails控制器中的around_filter更改每个请求的时区。正如Rails - Setting time_zone dynamically as per user selection
背景
Time.zone.now
只会将时间戳转换为Rails环境当前所在的时区。除非另有说明,否则始终为UTC。
Time.now
将始终返回系统时间。
如果你落后UTC说-05:00那个时间总是向前看。
答案 1 :(得分:1)
How about setting Time.zone
in the controller, which sets the time zone for the current request/thread.
You can also persist user’s time zone, and do something like:
Time.zone = current_user.time_zone
答案 2 :(得分:0)
Thanks folks! :) I solved the problem by:
Added an around filter in application controller to ensure times are changed for a user:
class ApplicationController < ActionController::Base around_filter :user_time_zone, if: :current_user
private
def user_time_zone(&block)
Time.use_zone(current_user.time_zone, &block)
end
end
Found a good video by Ryan Bates: https://www.youtube.com/watch?v=X-1ISHNEB9U after using your suggestions and researching more.