【问题标题】:how to change server time to client time on rails?如何在 Rails 上将服务器时间更改为客户端时间?
【发布时间】:2012-04-19 14:55:27
【问题描述】:

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

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

【问题讨论】:

  • 如果您同时有来自两个不同大陆的两个用户怎么办?
  • 我相信他们会有不同的应用实例和不同的时间数据。
  • 错误;他们会得到两个线程。
  • 好的,但是如何解决我的问题?

标签: ruby-on-rails heroku


【解决方案1】:

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

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

【讨论】:

  • 对不起;我不太了解鲁比。基本上,只要显示时间,就添加必要的小时数。
【解决方案2】:

检查一下

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

谢谢, 阿米特·帕特尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 2015-07-20
    • 2012-01-26
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    相关资源
    最近更新 更多