0

我目前有一个带有匹配值和时间戳日期的普通日志。匹配值并不总是存在,因此第二个可能的选项是通过时间戳进行匹配。

?timestamp=20120426140449

此查询运行正常。

Subscription.find_by_created_at("20120426140449".to_date) 

但由于日志来自发布到我的服务的第三方 API,因此双方之间的时间戳不一定匹配。

我的问题是。如何尝试匹配确切的日期,如果不尝试在给定的时间范围内寻找最接近的日期?

4

1 回答 1

1

首先我会使用to_datetimeorto_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 秒内创建的所有订阅

于 2012-05-26T07:44:33.093 回答