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

时间:2012-04-19 14:55:27

标签: 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)都将显示客户端时间。

2 个答案:

答案 0 :(得分:5)

显示时,应该应用UTC偏移量。

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

答案 1 :(得分:4)

检查

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 >

所以Time.zone.now.to_time.strftime("%c").to_datetime会在用户的时区给你当前时间UTC

Time.now总是在服务器的时区中给出时间。 Time.zone.now在指定的时区内提供时间。

谢谢, 阿米特帕特尔