我目前有一个带有匹配值和时间戳日期的普通日志。匹配值并不总是存在,因此第二个可能的选项是通过时间戳进行匹配。
?timestamp=20120426140449
此查询运行正常。
Subscription.find_by_created_at("20120426140449".to_date)
但由于日志来自发布到我的服务的第三方 API,因此双方之间的时间戳不一定匹配。
我的问题是。如何尝试匹配确切的日期,如果不尝试在给定的时间范围内寻找最接近的日期?
我目前有一个带有匹配值和时间戳日期的普通日志。匹配值并不总是存在,因此第二个可能的选项是通过时间戳进行匹配。
?timestamp=20120426140449
此查询运行正常。
Subscription.find_by_created_at("20120426140449".to_date)
但由于日志来自发布到我的服务的第三方 API,因此双方之间的时间戳不一定匹配。
我的问题是。如何尝试匹配确切的日期,如果不尝试在给定的时间范围内寻找最接近的日期?
首先我会使用to_datetime
orto_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)
将返回在“Thu, 26 Apr 2012 14:04:49”的 ±5 秒内创建的所有订阅