我有像
这样的范围scope :active_on_a_date, lambda { |date| where(:starts_at.gteq => date, :ends_at.lteq => date)}
传递的日期会自动转换为UTC吗? 或者任何人都可以解释如何进行日期比较 我传递的日期是Time.zone.now,它在IST +5.30小时
答案 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时间保持不变。
因为返回的时间和代码中的时间来自同一个区域,所以它只是一个简单的对象比较。