2013-07-15 1 views
0

У меня возникают проблемы с запросом, потому что полночное преобразование работает не так, как ожидалось.Rails isl table query с датой и временем

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. Если я изменить часовой пояс, чтобы он соответствовал GMT -5 сгенерированного 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' 

Не уверены, что, если есть экологически чистые способы сделать это, но он работал на меня (Ruby 1.9.3p385).

+0

Работал для меня, спасибо! – Marcelo