如何在rails上将服务器时间更改为客户端时间?

And*_*ndy 0 ruby-on-rails heroku

因此,我的最终目标是让Heroku服务器的Time.now与您从JavaScript执行新的Date.now()的时间相同.到目前为止我所做的是从JavaScript捕获时区偏移量,并使用适当的客户端时区在Rails上设置Time.zone,所以现在,Time.zone是正确的时区.但是,Time.now仍然反映了真实的时区而不是Time.zone.我想这不是我想要做的第一个地方.

所以我想要的是,服务器时间反映客户端时间,因此任何操作,如Time.now或DateTime.now或Date.today都将显示客户端时间.

SLa*_*aks 5

您应该在显示时间时应用UTC偏移.

所有服务器端时间计算或存储都应以UTC格式完成.


Ami*_*tel 5

检查一下

1.8.7 :001 > Time.zone
 => #<ActiveSupport::TimeZone:0xb740d1b8 @tzinfo=#<TZInfo::TimezoneProxy: Etc/UTC>, @utc_offset=nil, @name="UTC", @current_period=nil> 
1.8.7 :002 > Time.now
 => Fri Apr 20 13:13:53 +0530 2012 
1.8.7 :003 > Time.zone.now
 => Fri, 20 Apr 2012 07:43:59 UTC +00:00 
1.8.7 :004 > Time.zone = "Helsinki"
 => "Helsinki" 
1.8.7 :005 > Time.zone
 => #<ActiveSupport::TimeZone:0xb70ab830 @tzinfo=#<TZInfo::TimezoneProxy: Europe/Helsinki>, @utc_offset=nil, @name="Helsinki", @current_period=nil> 
1.8.7 :006 > Time.now
 => Fri Apr 20 13:14:48 +0530 2012 
1.8.7 :007 > Time.zone.now
 => Fri, 20 Apr 2012 10:45:10 EEST +03:00 
1.8.7 :008 > Time.zone.now.to_time.strftime("%c").to_datetime
 => Fri, 20 Apr 2012 10:47:01 +0000 
1.8.7 :009 >
Run Code Online (Sandbox Code Playgroud)

因此,Time.zone.now.to_time.strftime("%c").to_datetime您可以将用户所在时区的当前时间设为UTC

Time.now始终提供服务器时区中的时间。Time.zone.now给出指定时区的时间。

谢谢阿米特·帕特尔(Amit Patel)