Rails范围中的时间和区域

时间:2011-11-02 05:43:21

标签: ruby-on-rails timezone

我有像

这样的范围
scope :active_on_a_date, lambda { |date| where(:starts_at.gteq => date, :ends_at.lteq => date)}

传递的日期会自动转换为UTC吗? 或者任何人都可以解释如何进行日期比较 我传递的日期是Time.zone.now,它在IST +5.30小时

1 个答案:

答案 0 :(得分:3)

Activerecord将从本地时区转换为UTC并返回给您。

我的制作应用程序的一个例子。

我在我的application.rb

中有这个设置

config.time_zone = 'Wellington'

(明确关于应用的时区是个好主意)

所以在我的情况下:

> Time.zone.now
 => Wed, 02 Nov 2011 21:12:58 NZDT +13:00 

Rails控制台:

> Audio.find(661256).broadcast_at
 => Thu, 02 Nov 2006 21:06:00 NZDT +13:00 

在数据库中:

mysql> select broadcast_at from audio where audio.id = 661256;
+---------------------+
| broadcast_at        |
+---------------------+
| 2006-11-02 08:06:00 |
+---------------------+

数据库中的时间比Rails应用程序中的时间晚了13个小时。如果我要将时区更改为你的(IST),Rails中的时间将被调整为适合,但DB时间保持不变。

因为返回的时间和代码中的时间来自同一个区域,所以它只是一个简单的对象比较。