gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中将时间转换为用户时区

转载 作者:行者123 更新时间:2023-12-04 07:28:36 25 4
gpt4 key购买 nike

我在我的布局中使用这个 JavaScript 函数在 Rails 中设置本地时区:

<script type="text/javascript" charset="utf-8">
<% unless session[:timezone_offset] %>
$.ajax({
url: '/main/timezone',
type: 'GET',
data: { offset: (new Date()).getTimezoneOffset() }
});
<% end %>
</script>

这是接收函数:
# GET /main/timezone                                                     AJAX
#----------------------------------------------------------------------------
def timezone
#
# (new Date()).getTimezoneOffset() in JavaScript returns (UTC - localtime) in
# minutes, while ActiveSupport::TimeZone expects (localtime - UTC) in seconds.
#
if params[:offset]
session[:timezone_offset] = params[:offset].to_i * -60
ActiveSupport::TimeZone[session[:timezone_offset]]
end
render :nothing => true
end

然后我在我的 session 中有偏移量,所以我做这样的事情来显示时间:
<%= (@product.created_at + session[:timezone_offset]).strftime("%m/%d/%Y %I:%M%p") + " #{ActiveSupport::TimeZone[session[:timezone_offset]]}" %>

在 Rails 3 中所有这些真的有必要吗?我认为前两个代码块可能是,但第三个似乎有点过分......

最佳答案

您可以设置当前时区,所有操作都会记住它。它可以在一些非常高级的 Controller 的 before_filter 中完成,例如 AppController。例如

class ApplicationController < ActionController::Base
before_filter :set_zone_from_session

private

def set_zone_from_session
# set TZ only if stored in session. If not set then the default from config is to be used
# (it should be set to UTC)
Time.zone = ActiveSupport::TimeZone[session[:timezone_offset]] if session[:timezone_offset]
end

end

乍一看,它可能看起来并不好 - 但它会影响所有 View ,因此不需要在那里进行任何转换。

关于ruby-on-rails - 如何在 Rails 中将时间转换为用户时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3818234/

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