2017-06-06 103 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')'直接在你的控制台中比将问题发送到SO快100倍。 (:created_at => Time.now.beginning_of_day..Time.now.end_of_day).to_sql' – mudasobwa

+6

您可以通过'User.where看到它 – 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毫秒,所以你可以做到这一点。

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