0

現在、一致する値とタイムスタンプの日付を含むプレーン ログがあります。一致する値が常に存在するとは限らないため、2 番目に考えられるオプションは、タイムスタンプによる一致です。

?timestamp=20120426140449

このクエリは正常に実行されます。

Subscription.find_by_created_at("20120426140449".to_date) 

しかし、ログはサードパーティの API から私のサービスに投稿されるため、タイムスタンプは必ずしも 2 つの側で一致するとは限りません。

私の質問はです。正確な日付を一致させようとして、そうでない場合は、特定の時間範囲内で最も近いものを探すにはどうすればよいでしょうか?

4

1 に答える 1

1

First I would use to_datetime or to_time instead of to_date, because created_at is a datetime column and not only a date.

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

Now Subscription.for_timestamp_with_delta("20120426140449", 5) will return all subscriptions created within ±5 seconds of "Thu, 26 Apr 2012 14:04:49"

于 2012-05-26T07:44:33.093 に答える