我目前有一个带有匹配值和时间戳日期的普通日志。匹配值并不总是存在,因此第二个可能的选项是匹配时间戳。
?timestamp=20120426140449
此查询运行正常。
Subscription.find_by_created_at("20120426140449".to_date)
但由于日志来自发布到我服务的第三方API,因此时间戳不一定在双方之间匹配。
我的问题是。如何尝试匹配确切的日期,如果没有尝试在给定的时间范围内寻找最接近的日期?
答案 0 :(得分:1)
首先,我会使用to_datetime
或to_time
代替to_date
,因为created_at
是日期时间列,而不仅仅是日期。
class Subscription < ActiveRecord::Base
scope :for_timestamp_with_delta, lambda { |timestamp, delta|
datetime = timestamp.to_datetime
delta = delta.seconds
where(:created_at => datetime-delta..datetime+delta)
}
end
现在Subscription.for_timestamp_with_delta("20120426140449", 5)
将返回在“星期四,2012年4月26日14:04:49”的±5秒内创建的所有订阅