2013-07-15 4 views
0

자정 전환이 예상대로 작동하지 않기 때문에 쿼리에 문제가 있습니다.Rails 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'" 

내 시간대로 예상하고 있었다 그리니치 표준시 -3입니다. 이 GMT와 일치하도록 내가 시간대를 변경하는 경우 -5 생성 된 SQL은 시간대를 무시할 수있는 방법이

루비 2.0.0p247

condition.to_sql #=> "`tasks`.`scheduled_to` > '2013-07-15 05:00:00'" 
  • 레일 4.0.0
  • 이 있습니다 그래서 쿼리는 예상대로 동작합니까?

+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' 

깨끗한 방법이 있지만 나에게 효과적인지 (Ruby 1.9.3p385) 확실하지 않습니다.

+0

나에게 고마워! – Marcelo