尝试仅根据时间过滤日期时间字段

Trying to filter datetime fields based on time only

我在弄清楚如何为我尝试执行的特定类型的查询构建范围时遇到了一些问题。

基本上我有一个可用性模型,它有一个 start_timeend_time 日期时间列。

我的视图中有一个开始和结束时间下拉列表,returns 搜索此查询:

 "availabilities"."start_time" >= '2015-10-27 00:00:00.000000' AND "availabilities"."end_time" <= '2015-10-31 00:00:00.000000'

我被要求添加一个新的时间范围过滤器:

Morning (6am - 12pm)
Afternoon (12-6pm)
Night (6pm - 12am )

我不确定我会如何处理。这是可用性记录的样子:

   <Availability:0x000000065b2bf0> {
                 :id => 1,
         :start_time => Sat, 21 Nov 2015 11:00:00 UTC +00:00,
           :end_time => Sat, 21 Nov 2015 12:00:00 UTC +00:00,
              :price => 24.1,
           :discount => 20.0,
         :created_at => Fri, 23 Oct 2015 21:31:49 UTC +00:00,
         :updated_at => Fri, 23 Oct 2015 21:31:49 UTC +00:00,
        :facility_id => 1,
         :booking_id => nil
    }

所以我只需要过滤字段的时间部分,但我不确定如何处理。

如何在查询中使用时间戳的一部分在某种程度上取决于您使用的数据库。例如,对于 PostgreSQL,您可以使用提取函数根据一天中的时间对事物进行分组或过滤。

如果您不确定该怎么做,您还可以查看 groupdate gem (https://github.com/ankane/groupdate),它似乎以一种与数据库无关的方式执行您正在寻找的操作.