Piszę aplikację Railsową, ale nie mogę znaleźć sposobu na obliczenie czasu względnego, tzn. Jeśli otrzyma określoną klasę Time, może obliczyć „30 sekund temu” lub „2 dni temu” lub jeśli jest ona dłuższa niż miesiąc „9/1/2008” itp.
ruby-on-rails
ruby
John Topley
źródło
źródło
Odpowiedzi:
Wygląda na to, że szukasz
time_ago_in_words
metody (lubdistance_of_time_in_words
) z ActiveSupport. Nazwij to tak:źródło
ActiveSupport
, jest zdefiniowane wActionView::Helpers::DateHelper
.helper
, którą można wywoływać i uzyskiwać dostęp do tych metod.helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
Najpierw, a potem wszystko gotowe do użycia7.days.ago
i innych podobnych konstrukcji.Napisałem to, ale muszę sprawdzić wymienione metody, aby sprawdzić, czy są lepsze.
źródło
return
linię wcase
instrukcjielse
i usunąć wszystkiereturn
litery.+99
+800
+180000
?Żeby wyjaśnić rozwiązanie Andrew Marshalla dotyczące używania time_ago_in_words
(dla Rails 3.0 i Rails 4.0)
Jeśli jesteś w widoku
Jeśli jesteś kontrolerem
Kontrolery nie mają modułu domyślnie importowanego ActionView :: Helpers :: DateHelper .
Uwaga: Importowanie pomocników do kontrolerów nie jest „drogą szynową”. Pomocnicy służą do pomocy w wyświetlaniu. Metoda time_ago_in_words została uznana za encję widoku w triadzie MVC . (Nie zgadzam się, ale kiedy jestem w Rzymie ...)
źródło
Co powiesz na
A może coś innego, do czego strzelałeś?
źródło
Możesz użyć operatorów arytmetycznych do wykonania czasu względnego.
Dam ci 2 dni temu.
źródło
2.days.since
lub2.days.from_now
Coś takiego działałoby.
źródło
#{diff_seconds/360}
powinno być#{diff_seconds/3600}
. Zredagowałem to.Ponieważ większość odpowiedzi tutaj sugeruje time_ago_in_words .
Zamiast używać :
W Railsach preferuj:
wraz z biblioteką jQuery http://timeago.yarp.com/ , z kodem:
Główna zaleta: buforowanie
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
źródło
time_ago_in_words
to czas SSpójrz na metody instancji tutaj:
http://apidock.com/rails/Time
Ma to przydatne metody, takie jak wczoraj, jutro, początek tygodnia, temu itd.
Przykłady:
źródło
Napisałem klejnot, który robi to dla obiektów Rails ActiveRecord. W przykładzie użyto create_at, ale będzie również działał na updated_at lub cokolwiek innego z klasą ActiveSupport :: TimeWithZone.
Wystarczy zainstalować klejnot i wywołać metodę „ładną” w instancji TimeWithZone.
https://github.com/brettshollenberger/hublot
źródło
Jeśli budujesz aplikację Railsową, powinieneś jej użyć
Podaje godzinę lub datę w strefie czasowej, w której skonfigurowano aplikację Rails.
Na przykład jeśli skonfigurujesz aplikację do korzystania z UTC, to
Time.zone.now
zawsze będzie ona w czasie UTC (na przykład zmiana brytyjskiego czasu letniego nie będzie miała na nią wpływu).Obliczanie czasu względnego jest łatwe, np
źródło
Innym podejściem jest rozładowanie logiki z backendu i sprawdzenie, czy przeglądarka wykonuje zadanie za pomocą wtyczek JavaScript, takich jak:
jQuery czas temu lub jego adaptacja Rails Gem
źródło