Funções de data / hora “atrás” em Ruby / Rails

86

Eu queria saber se existe uma maneira no Rails de calcular a data e hora como - meio minuto atrás, 2 minutos atrás, 1 dia atrás, etc. Algo como data e hora do Twitter real.

Eu quero saber se Ruby / Rails tem uma função embutida para tal conversão de data e hora?

Kapso
fonte

Respostas:

185

Você pode usar:

10.minutes.ago
2.days.since

Ou em suas visões você tem os ajudantes:

distance_of_time_in_words(from_time, to_time)
time_ago_in_words(from_time)

Verifique a API para obter detalhes e mais opções.

Toby Hede
fonte
8
A partir do Rails 3 é agora em 10.minutes.agovez de minutos.
cbron
4
Se você estiver fora do Rails, require 'active_support'(pelo menos se o Rails 2.X estiver instalado).
JellicleCat
7
require 'active_support / all' ou se estiver usando bundle: gem "activesupport",: require => "active_support"
Alireza Eliaderani
8

Você pode usar os métodos disponíveis para obter o tempo no passado ou futuro usando ago, sincealias para from_nowe muitos métodos disponíveis

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 

Verifique todos os métodos disponíveis na classe Time

Deepak Mahakale
fonte
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
Dorian
fonte