2013-07-15 54 views
0

我遇到查詢問題,因爲午夜轉換未按預期工作。使用日期和時間導航的arel表查詢

time = Date.today.midnight #=> Mon, 15 Jul 2013 00:00:00 BRT -03:00 

time.class #=> ActiveSupport::TimeWithZone 

condition = Task.arel_table[:scheduled_to].gt(time) 

condition.to_sql #=> "`tasks`.`scheduled_to` > '2013-07-15 03:00:00'" 

我期待生成的sql是

`tasks`.`scheduled_to` > '2013-07-15 00:00:00'" 

我的時區是GMT -3。如果我更改時區,使其符合北京時間生成的SQL是

condition.to_sql #=> "`tasks`.`scheduled_to` > '2013-07-15 05:00:00'" 
  • 的Rails 4.0.0
  • 紅寶石2.0.0p247

有沒有辦法忽略時區所以查詢的行爲像預期的那樣?

+0

可能的結果:http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html#method-i-utc –

回答

1

時區是相對於UTC(0000),所以你必須從你的日期中刪除它。

DateTime.now.midnight.utC#=> '2013-08-23 03:00:00 +0000' 

現在,剛擺脫補償時間。

DateTime.now.midnight.utc.change({:hour => 0, :min => 0}) #=> '2013-08-23 00:00:00 +0000' 

不知道是否有做它一個更清潔的方式,但它爲我工作(紅寶石1.9.3p385)。

+0

爲我工作,謝謝! – Marcelo