2010-04-20 10 views
5

C'è una gemma di rubino che formatta le date relative all'ora corrente? Voglio uscita come "Domani alle 17:00", "Giovedi prossima settimana alle 17:15", non sono troppo preoccupato per l'output esatto, purché si tratti di date relative in linguaggio naturaleFormato date relative

risposta

7

se si dispone di binari, Penso che lo ActionView::Helpers::DateHelper#distance_of_time_in_words sia d'aiuto.

require 'rubygems' 
require 'action_view' 
include ActionView::Helpers::DateHelper 

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, true) # => less than 20 seconds 
distance_of_time_in_words(from_time, 3.years.from_now)    # => over 3 years 
distance_of_time_in_words(from_time, from_time + 60.hours)   # => about 3 days 
distance_of_time_in_words(from_time, from_time + 45.seconds, true) # => less than a minute 
distance_of_time_in_words(from_time, from_time - 45.seconds, true) # => less than a minute 
distance_of_time_in_words(from_time, 76.seconds.from_now)   # => 1 minute 
distance_of_time_in_words(from_time, from_time + 1.year + 3.days) # => about 1 year 
distance_of_time_in_words(from_time, from_time + 4.years + 9.days + 30.minutes + 5.seconds) # => over 4 years 

to_time = Time.now + 6.years + 19.days 
distance_of_time_in_words(from_time, to_time, true)  # => over 6 years 
distance_of_time_in_words(to_time, from_time, true)  # => over 6 years 
distance_of_time_in_words(Time.now, Time.now)   # => less than a minute 

In caso di relativa all'ora corrente, utilizzare distance_of_time_in_words_to_now anziché distance_of_time_in_words.

Se l'app è basata su rotaie, è sufficiente utilizzare distance_of_time_in_words, distance_of_time_in_words_to_now, time_ago_in_words in vista.

+0

Proprio quello di cui ho bisogno, ma non utilizzando i binari :(Qualche idea se i componenti Rails sono resi disponibili al di fuori delle rotaie? –

+0

Penso che il codice sopra funzionerà senza binari, dopo aver installato action pack (gem install actionpack), ma non – unsouled

+0

@unsouled - Confermato – steenslag

-3

provare la gemma 'cronica'

fa esattamente quello che chiedi.

+1

cronico sembra fare il contrario: analizza i tempi, non li formatta. –