Funkcje daty / czasu „Ago” w Ruby / Rails

87

Zastanawiałem się, czy w Railsach jest sposób na obliczenie znacznika czasu - pół minuty temu, 2 minuty temu, 1 dzień temu itd. Coś w rodzaju twitterowego znacznika daty w czasie rzeczywistym.

Chcę wiedzieć, czy Ruby / Rails ma wbudowaną funkcję do takiej konwersji daty i czasu?

kapso
źródło

Odpowiedzi:

188

Możesz użyć:

10.minutes.ago
2.days.since

Lub w swoich poglądach masz pomocników:

distance_of_time_in_words(from_time, to_time)
time_ago_in_words(from_time)

Sprawdź interfejs API, aby uzyskać szczegółowe informacje i więcej opcji.

Toby Hede
źródło
8
Od Rails 3 teraz 10.minutes.agozamiast min.
cbron
4
Jeśli jesteś poza Railsami require 'active_support'(przynajmniej jeśli zainstalowano Rails 2.X).
JellicleCat
7
wymagają „active_support / all” lub w przypadku korzystania z pakietu: gem „activesupport”,: require => „active_support”
Alireza Eliaderani
9

Można użyć dostępnych metod, aby uzyskać czas w przeszłości lub przyszłości użyciu ago, sincealias dla from_nowi wiele dostępnych metod

Time.current
#=> Tue, 20 Sep 2016 15:03:30 UTC +00:00

2.minutes.ago
#=> Tue, 20 Sep 2016 15:01:30 UTC +00:00

2.minutes.since
#=> Tue, 20 Sep 2016 15:05:30 UTC +00:00 

1.month.ago
#=> Sat, 20 Aug 2016 15:03:30 UTC +00:00

1.year.since
#=> Wed, 20 Sep 2017 15:03:30 UTC +00:00 

Sprawdź wszystkie dostępne metody w klasie Time

Deepak Mahakale
źródło
2

distance_of_time_in_words :

from_time = Time.now

distance_of_time_in_words(from_time, from_time + 50.minutes) # => about 1 hour
distance_of_time_in_words(from_time, 50.minutes.from_now) # => about 1 hour
distance_of_time_in_words(from_time, from_time + 15.seconds) # => less than a minute
distance_of_time_in_words(from_time, from_time + 15.seconds, include_seconds: true) # => less than 20 seconds

time_ago_in_words :

time_ago_in_words(3.minutes.from_now) # => 3 minutes
time_ago_in_words(3.minutes.ago) # => 3 minutes
time_ago_in_words(Time.now - 15.hours) # => about 15 hours
dorycki
źródło