2016-07-14 14 views
0

Ich habe ein Problem mit ActiveRecord Abfragen. Ich nehme an, dass es mit der Zeitzone verbunden ist. Dieses BeispielRails falsche Datumsabfrage

date_start = Date.parse(params[:filter][:date_start]).beginning_of_day 
date_end = Date.parse(params[:filter][:date_start]).end_of_day 
data = MyModel.where("created_at>=? and created_at <=?", date_start, date_end) 

ist, wenn params params sind [: Filter] [: DATE_START] ist "10.07.16" und params [: Filter] [: date_end] ist "15.07.16" Daten in ergebenden Abfrage wird falsch sein. Die resultierenden Daten sind [korrektes Datum] - [Zonenzeitdifferenz]. So insted 2016.07.16 00.00 für start_end Ich habe 2016-07-15 21:00

+0

erste Änderung der Datumsformat ... es wie Date.parse ("16.07.10") #yymmdd => So, 10. Juli 2016 richtig –

+0

Aber Date.parse Parsen mein Date sein sollte . Warum sollte ich es ändern? – Maxim

+0

Ok, dein Problem ist in der Abfrageebene .. –

Antwort

0

Es gibt zwei Möglichkeiten, um die Zeitzone

Time.zone.now und Time.now

Anstelle der Verwendung zu verwenden Verwenden Sie Date.parseTime.zone.parse. Hier finden Sie weitere Details, um die Zeitzone zu erhalten. Mit unterschiedlichen Daten können Sie verschiedene Werte finden.

date_start = Time.zone.parse(params[:filter][:date_start]).beginning_of_day date_end = Time.zone.parse(params[:filter][:date_start]).end_of_day data = MyModel.where("created_at beween ? and ?", date_start, date_end)