8

「created_at」日付でレコードを検索しようとしています - データベースの列タイプは「datetime」で、jQuery の UI DatePicker を使用しています

私のURLは次のようになります: "localhost:3000/users_supported?selected_date=2012-10-31"

これまでのところ、私はうまくやっています:)そしてコントローラーの私のクエリは次のようになります:

@support_histories = current_agent.support_histories.where(:created_at => Date.parse(params[:selected_date]))

「datetime」データベース列からのみ「date」でレコードを適切に抽出する方法

Rails Console でこれを実行しようとしましたが、うまくいきませんでした:

sh = SupportHistory.where(:created_at => DateTime.parse('2012-10-31'))
sh = SupportHistory.where(:created_at => Date.parse('2012-10-31'))
sh = SupportHistory.where(:created_at => DateTime.strptime('2012-10-31', '%Y-%m-%d'))

以下のようにすればレコードを取得できますが、「DateTime」ではなく「date」でレコードを検索しようとしているため、役に立ちません。

sh = SupportHistory.where(:created_at => '2012-10-31 19:49:57')
4

5 に答える 5

32
selected_date = Date.parse(params[:selected_date])
# This will look for records on the given date between 00:00:00 and 23:59:59
sh = SupportHistory.where(
       :created_at => selected_date.beginning_of_day..selected_date.end_of_day)

タイム ゾーンは、調べる必要がある懸念事項かもしれませんが、すべての時間が同じタイム ゾーンにある場合、これは機能するはずです。

于 2012-11-04T03:33:00.827 に答える
1

以下のようなモデルでメソッドを作成することでこの問題を解決しました。たとえば、私のモデルは ticket.rb です。

 def created_date
   self.created_at.to_date
 end

それから私はこのように質問しました、

 selected_date = Date.parse(params[:date])

 Ticket.all.map{|t| t if t.created_date == selected_date}.compact

これにより、ユーザーが選択した日付と一致する正確な結果が得られます。

于 2016-01-26T16:29:08.723 に答える
0

特定の日時を解析したい場合

SupportHistory.where("created_at>=?", DateTime.parse('10 Dec 2021 11:54:00 PST -08:00'))
于 2021-12-23T11:23:08.067 に答える