2017-06-06 1 views
0

Ich möchte einen Datumsbereich in Rails abfragen:Beinhalten Datumsbereiche in Rails die Grenzdaten?

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 

mein Bereich umfassen diese beiden Grenzzeiten der Fall ist, oder ist < und > nicht verwendet?

+0

'..' ist inklusive Bereich. – sawa

+5

_Sidenote: _ Ausführen dieser Zeile: '(Time.now.beginn_of..Time.now.end_of_day) .cover? Time.parse ('2017-06-06 00:00:00 +0000') 'direkt in Ihrer Konsole wäre 100-mal schneller als die Frage an SO zu posten. – mudasobwa

+6

Sie können es nach 'User.where (: created_at => Time.now.beginning_of_day..Time.now.end_of_day) .to_sql' sehen – fangxing

Antwort

1

Das Öffnen der guten Konsole beantwortet alle Ihre Fragen.

Mit .. ruft eine BETWEEN Anweisung in der db

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

Mit ... ruft es die >=< Magie.

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 enthält einen netten kleine Helfer genannt all_day, die dies ermöglicht. Es gibt die gleiche Aussage wie bei ..

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

Hinweis:

Wenn Sie wirklich paranoid sind und haben einen super wichtig lebensrettenden App gehen, Time.zone.today könnte tatsächlich in dem ändern Millisekunden aus dem Aufruf beginning_of_day und end_of_day, so können Sie dies dann tun.

today = Time.zone.today 
Users.where(created_at: today.beginning_of_day..today.end_of_day) 
Verwandte Themen