2012-05-28 5 views
7

Mam aplikację szyn, która ma model Checkin. Chcę znaleźć wszystkie rekordy, które znajdują się w określonym przedziale czasowym dla bieżącego dnia. Jak mogę napisać where, aby uzyskać wszystkie zapisy, które zostały utworzone między 12.00 a 16.30?Zapytanie o szyny między dwoma razy

+0

Z której bazy danych korzystasz? funkcje do uzyskania godziny będą się różnić. Będzie to najłatwiejsze, jeśli oprócz godziny będziesz przechowywać godzinę/minutę dnia. –

+0

Używam postgresql. Używam standardowej kolumny "create_at" timestamp, którą zapewnia Rails –

Odpowiedz

36

Odpowiedź @ x1a4 powinna być dla ciebie dobra, ale możesz to zrobić w bardziej czytelny i krótszy sposób, używając zakresu.

Chekin.where(created_at: Time.parse("12pm")..Time.parse("4:30pm")) 

Należy wygenerować coś takiego:

SELECT "checkins".* 
FROM "checkins" 
WHERE ("checkins"."created_at" BETWEEN '2012-05-28 12:00:00.000000' AND '2012-05-28 16:30:00.000000') 

można zmienić Time.parse("12pm") z inny sposób stworzyć razem.

8

To wygląda jak to działa, zakładając Strefa czasowa UTC:

Record.where('created_at > ? AND created_at < ?', Date.today + 12.hours, Date.today + 16.5.hours) 

lub z BETWEEN:

Record.where('created_at BETWEEN ? AND ?', Date.today + 12.hours, Date.today + 16.5.hours) 

BETWEEN może lub nie może zawierać drugą wartość w przedziale. Postgres includes it.

0

Można użyć poniżej gem znaleźć zapisy między datami,

Ten gem dość łatwe w użyciu i bardziej jasne [Wg gwiazdy] [1]. Używam tego klejnotu, a interfejs API jest bardziej przejrzysty, a dokumentacja jest dobrze wyjaśniona.

Post.between_times(
Time.zone.now - 3.hours, # all posts in last 3 hours 
Time.zone.now 
) 

Tutaj można przekazać nasze pole również Post.by_month("January", field: :updated_at)

Proszę zapoznać się z dokumentacją i spróbować.