2010-07-19 8 views
75

Mi chiedevo se c'è un modo in Rails per calcolare il timestamp come - mezzo minuto fa, 2 minuti fa, 1 giorno fa ecc. Qualcosa come il timbro della data in tempo reale di Twitter .Funzioni "data/ora" in Ruby/Rails

Voglio sapere se Ruby/Rails ha una funzione integrata per tale conversione data/ora?

risposta

151

È possibile utilizzare:

10.minutes.ago 
2.days.since 

O nel vostro punto di vista si ha l'aiutanti:

distance_of_time_in_words(from_time, to_time) 
time_ago_in_words(from_time) 

Verificare the API per i dettagli e più opzioni.

+8

A partire da Rails 3 è ora '10.minutes.ago' invece di min. – cbron

+4

Se sei fuori da Rails, 'richiede 'active_support'' (almeno se Rails 2.X è installato). – JellicleCat

+7

richiedono 'active_support/all' o se si utilizza bundle: gem "activesupport",: require => "active_support" – cubny

5

È possibile utilizzare metodi disponibili per ottenere il tempo in passato o futuro utilizzando ago, since alias per from_now e molti metodi disponibili

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 

Controllare tutti i metodi disponibili in Time classe

0

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