2010-07-19 11 views
75

Me preguntaba si hay una forma en Rails para calcular la marca de tiempo como - hace medio minuto, 2 minutos, 1 día, etc. Algo así como la marca de fecha y hora de twitter .Funciones de fecha/hora "Ago" en Ruby/Rails

Quiero saber si Ruby/Rails tiene una función integrada para dicha conversión de fecha y hora?

Respuesta

151

Se puede utilizar:

10.minutes.ago 
2.days.since 

O en sus puntos de vista que tienen los ayudantes:

distance_of_time_in_words(from_time, to_time) 
time_ago_in_words(from_time) 

Comprobar the API para obtener más información y más opciones.

+8

A partir de Rails 3 ahora es '10.minutes.ago' en lugar de mins. – cbron

+4

Si se encuentra fuera de Rails, 'require 'active_support'' (al menos si está instalado Rails 2.X). – JellicleCat

+7

requiere 'active_support/all' o si usa bundle: gem "activesupport",: require => "active_support" – cubny

5

Puede utilizar los métodos disponibles para obtener la hora en el pasado o en el futuro el uso de ago, since alias para from_now y muchos métodos disponibles

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 

Verificar todos los métodos disponibles en Time clase

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