Fonctions de date / heure «Ago» dans Ruby / Rails

87

Je me demandais s'il y avait un moyen dans Rails de calculer l'horodatage comme - il y a une demi-minute, il y a 2 minutes, il y a 1 jour, etc. Quelque chose comme l'horodatage en temps réel de Twitter.

Je veux savoir si Ruby / Rails a une fonction intégrée pour une telle conversion date-heure?

kapso
la source

Réponses:

188

Vous pouvez utiliser:

10.minutes.ago
2.days.since

Ou dans vos vues, vous avez les aides:

distance_of_time_in_words(from_time, to_time)
time_ago_in_words(from_time)

Consultez l'API pour plus de détails et plus d'options.

Toby Hede
la source
8
À partir de Rails 3, c'est maintenant 10.minutes.agoau lieu de minutes.
cbron
4
Si vous êtes en dehors de Rails, require 'active_support'(au moins si Rails 2.X est installé).
JellicleCat
7
require 'active_support / all' ou si vous utilisez le bundle: gem "activesupport",: require => "active_support"
Alireza Eliaderani
9

Vous pouvez utiliser les méthodes disponibles pour obtenir l'heure passée ou future en utilisant ago, sincealias pour from_nowet de nombreuses méthodes 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 

Vérifiez toutes les méthodes disponibles dans la classe Time

Deepak Mahakale
la source
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
la source