2012-04-19 77 views
0

所以我最终的目标是让Heroku服务器的Time.now与您在JavaScript中执行新的Date.now()的时间相同。到目前为止,我所做的工作就是捕获JavaScript中的时区偏移量,并在适当的客户端时区上设置Rails上的Time.zone,所以现在Time.zone是正确的时区。但是,Time.now仍然反映了真实时区,而不是时区。我想这不是我想要做的第一件事。如何将服务器时间更改为导轨上的客户端时间?

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

+0

如果你有来自两个不同大洲的两个用户在同一时间? – SLaks 2012-04-19 14:57:46

+0

我相信他们会有不同的时间数据应用程序的实例。 – Andy 2012-04-19 15:02:14

+0

错误;他们会得到两个线程。 – SLaks 2012-04-19 15:02:28

回答

5

您应该应用UTC偏移量显示时间。

所有服务器端时间计算或存储都应该使用UTC。

+0

你能给我一些代码来引用吗?谢谢 – Andy 2012-04-19 15:06:05

+0

对不起,我不太了解Ruby。基本上,每当你显示一个时间时,添加必要的小时数。 – SLaks 2012-04-19 15:07:24

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在指定的时区给出时间。

感谢, 阿米特·帕特尔

相关问题