2017-02-24 52 views
0

我有一個後臺工作,每天晚上在UTC的午夜運行。我需要爲活動記錄模型獲取所有新記錄,其中up​​dated_at> =上一個午夜(UTC)和當天午夜UTC。如何爲活動記錄指定日期範圍?

這樣做的最好方法是什麼?

,所以我需要的東西,如:

MyRecord.where(updated_at: prior_utc_midnight..tonight_utc_midnight) 

但我不能確定如何纏鬥Time/DateDateTime類來完成我想要什麼。

謝謝!

+0

不幸的是你必須做類型轉換。這真的是唯一可以幫助的事情。 :( – Maxcell

+0

推薦的東西像where(「updated_at> =#{formatted_prior_utc_midnight}和updated_at <#{formatted_tonight_utc_midnight}」) – abstractx1

+0

@ abstractx1我的問題是更多如何在日期和時間類中爭吵以獲得午夜的前一天utc,並今天午夜獲得utc – horseyguy

回答

-1
MyRecord.where("updated_at >= '#{Date.today}' and updated_at < '#{Date.today.next_day}'") 

唯一要考慮的是表中數據的時區。如果這也是UTC,那麼這個查詢應該給你你所要求的結果。

1

您可以使用beginning_of_dayend_of_day方法。

這些助手會給你深夜時段

MyRecord.where(created_at: Date.today.beginning_of_day..Date.today.end_of_day) 

#=> SELECT "my_records".* FROM "my_records" WHERE ("my_records"."created_at" BETWEEN '2017-02-24 00:00:00.000000' AND '2017-02-24 23:59:59.999999') 

而且,看看這些方法

0

這是一個有點靠不住,但我認爲這工程:

MyRecord.where("created_at > ? AND created_at < ?", Date.today.to_datetime.new_offset(0) - 1.day, Date.today.to_datetime.new_offset(0))