2016-03-25 8 views
1

私は2つの日付の日付の検索が正しく機能していないようです。日付の使用が適切に行われていません。

検索モデルでcreated_atの日付を次のように検索しています。私は、例えばだけ日からを入力した場合、私はFROM_DATEとTO_DATE

のフィールドを持つ形状を有するようto_dateto_date + 1.day

としてto_date - 1.dayのバリエーションのカップルを試み

# -------------------------- Begin created at dates ---------------------------- 
    # Only one date is filled in: 
    documents = documents.where("documents.created_at >= ?", from_date) if from_date.present? and not to_date.present? 
    documents = documents.where("documents.created_at <= ?", to_date - 1.day) if to_date.present? and not from_date.present? 

    # Both Dates are filled in 
    documents = documents.where("documents.created_at >= ?", from_date,) if from_date.present? and to_date.present? 
    documents = documents.where("documents.created_at <= ?", to_date) if to_date.present? and from_date.present? 

注03/24/15、私は期待していたすべてのアイテムを手に入れます。

2016-03-24 
id Subject Category Author Date Created Date Updated  
32 Test Of Dates Test Christopher Mendla 03/24/16 16:45 03/24/16 16:45 Edit 
33 Friday Test Christopher Mendla 03/25/16 09:21 03/25/16 09:21 

IOW、期待どおりに動作します。

ただし、to_dateを03/25/16に設定すると、3/25/16に作成されたレコード以外のすべてのレコードが取得されます。 03/26/16のto_dateを検索すると、created_atが3/25/16のレコードが含まれます。

私はapplication.rbに以下を追加しましたが、この問題はタイムゾーンを設定する前に存在していたことに注意してください(データがUTC以外のものは問題を引き起こす可能性がありますが、 SQLから報告する。)

config.time_zone = 'Eastern Time (US & Canada)' 
config.active_record.default_timezone = 'Eastern Time (US & Canada)' 
+0

私は解決策に近づいていますされていることを信じているからから日付としてキャストを使用していませんでした。 'created_at <= '2016-03-25'を検索すると03/25/16に作成されたレコードは表示されないようです。私は、 'cast([created_at] as date) '=' 2016-03-25 ''を使用してdbの日付だけを見るのではなく、時間を調べるための情報を見つけました。 –

答えて

0

私は私がこれまでに保存された日付/時刻を変更するためにSQLステートメントを変更しなければならなかったことがわかりました。データベースはMS SQL Serverにあります。

# -------------------------- Begin created at dates ---------------------------- 
    # Only one date is filled in: 
    documents = documents.where("documents.created_at >= ?", from_date) if from_date.present? and not to_date.present? 
    documents = documents.where("cast (documents.created_at as date) <= ?", to_date) if to_date.present? and not from_date.present? 

    # cast ([created_at] as date) <= '2016-03-25' 

    # Both Dates are filled in 
    documents = documents.where("documents.created_at >= ?", from_date,) if from_date.present? and to_date.present? 
    documents = documents.where("cast (documents.created_at as date) <= ?", to_date) if to_date.present? and from_date.present? 

cast (documents.created_at as date)は、日付などの日付を比較して時間を無視します。 2016-03-25 11:40の保存日は2016-03-25以下ではないことは明らかです。

私は2016年3月25日11時40分には> = 2016年3月25日

関連する問題