0

所以我的最终目标是让 Heroku 服务器的 Time.now 与您从 JavaScript 执行 new Date.now() 的时间相同。到目前为止,我所做的是从 JavaScript 中捕获时区偏移,并在 Rails 上设置 Time.zone 并使用适当的客户端时区,所以现在 Time.zone 是正确的时区。但是,Time.now 仍然反映实际时区,而不是输入 Time.zone 的时区。我想这不是我一开始就应该做的。

所以再一次,我想要的只是服务器时间来反映客户端时间,所以任何诸如 Time.now 或 DateTime.now 或 Date.today 之类的操作都将与客户端时间一起显示。

4

2 回答 2

5

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

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

于 2012-04-19T15:05:07.023 回答
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 >

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

Time.now总是在你的服务器的时区给出时间。Time.zone.now给出指定时区的时间。

谢谢,阿米特帕特尔

于 2012-04-20T07:53:07.823 回答