2017-06-06 32 views
0

私はRailsの中で日付範囲を照会する:Railsの日付範囲には境界日が含まれていますか?

User.where(:created_at => Time.now.beginning_of_day..Time.now.end_of_day) 

Time.now.beginning_if_day is at 00:00:00 
Time.now.end_of_day is at: 23.59.59 

私の範囲は、これら二つの境界時間を含む、またはいないが、使用<>のですか?

+0

「..」が含まれる。 – sawa

+5

_Sidenote:_この行を実行すると、 '(Time.now.beginning_of_day..Time.now.end_of_day).cover? Time.parse( '2017-06-06 00:00:00 +0000') 'は、コンソールに直接質問を投稿するより100倍速くなります。 – mudasobwa

+6

これは 'User.where(:created_at => Time.now.beginning_of_day..Time.now.end_of_day).to_sql'で見ることができます – fangxing

答えて

1

良いコンソールを開くとすべての質問に答えます。 ..

は、それが>=<魔法を呼び出し...

User.where(created_at: Time.zone.today.beginning_of_day..Time.zone.today.end_of_day).to_sql 

# SELECT "users".* 
# FROM "users" 
# WHERE ("users"."created_at" BETWEEN '2017-06-06 00:00:00' AND '2017-06-06 23:59:59.999999') 

デシベルでBETWEEN文を呼び出します。

User.where(created_at: Time.zone.today.beginning_of_day...Time.zone.today.end_of_day).to_sql 

# SELECT "users".* 
# FROM "users" 
# WHERE ("users"."created_at" >= '2017-06-06 00:00:00' AND 
#  "users"."created_at" < '2017-06-06 23:59:59.999999') 

Rails 5.1には、all_dayという名前の小さなヘルパーが含まれています。それはと同じ文を発行する..

Users.where(created_at: Time.zone.today.all_day).to_sql 

注:

あなたは本当に被害妄想だと、超重要な救命アプリが起こっている場合は、Time.zone.todayが実際に変更される可能性がありますbeginning_of_dayend_of_dayを呼び出してから1ミリ秒かかるので、これを行うことができます。

today = Time.zone.today 
Users.where(created_at: today.beginning_of_day..today.end_of_day) 
関連する問題