2010-07-23 18 views
16

Chciałbym napisać prostą funkcję do powiedzenia w godzinach:Jak odjąć od datetime?

Ile czasu upłynęło od tego czasu?

Moje próby:

-time = DateTime.now.hour - (self.created_at.hour) 

Czy ktoś wie jak to zrobić w Ruby on Rails?

+0

To nie zadziała, ponieważ porównywane są tylko godziny, więc jeśli minie więcej niż jeden dzień, będzie to niedokładne, ale w przeciwnym razie nadal powinno być obliczone na liczbę. Zamiast tego możesz zrobić "DateTime.now - self.created_at" bezpośrednio, co da ci różnicę czasu w sekundach. Co musisz zrobić? – Karl

+0

To nie działa, ponieważ nie można odjąć od DateTime, chyba że jest to ciąg znaków. A jeśli jest to ciąg znaków, jak wyświetlasz go ponownie? – Trip

Odpowiedz

21

Szyny zwykle używa Time nie DateTime. Dlaczego nie zrobisz Time.now - self.created_at? Następnie można przekonwertować z sekund na godziny, dzieląc przez 3600.

7

Szukasz funkcji time_ago_in_words (from_time, include_seconds = false). Oto kilka przykładów z docs:

time_ago_in_words(3.minutes.from_now)  # => 3 minutes 
time_ago_in_words(Time.now - 15.hours)  # => 15 hours 
time_ago_in_words(Time.now)     # => less than a minute 
from_time = Time.now - 3.days - 14.minutes - 25.seconds  # => 3 days 
+4

Nie szukam słów. Zastanawiam się, jak odjąć DateTime od innego DateTime – Trip

+1

W tym przypadku mckeed ma właściwą odpowiedź. – sosborn

16

Got it !. Najpierw musisz upewnić się, że twoje dane są w tych samych danych, które zostaną odjęte od tego, czy jest to Czas czy Data. Wybrałem czas. Następnie dzielisz go na metody wbudowane Rubiego w czasie. Przekłada się to na liczbę dni, ale może to być również 1. godzina. itp.

(Time.now - self.created_at.to_time)/1.day