J'écris une application Rails, mais je n'arrive pas à trouver comment faire du temps relatif, c'est-à-dire que si on lui donne une certaine classe de temps, il peut calculer "il y a 30 secondes" ou "il y a 2 jours" ou si c'est plus d'un mois "9/1/2008", etc.
ruby-on-rails
ruby
John Topley
la source
la source
Réponses:
On dirait que vous recherchez la
time_ago_in_words
méthode (oudistance_of_time_in_words
) d'ActiveSupport. Appelez ça comme ceci:la source
ActiveSupport
, il est défini dansActionView::Helpers::DateHelper
.helper
que vous pouvez appeler et accéder à ces méthodes.helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
D'abord, et puis vous êtes prêt pour l'utilisation7.days.ago
et d'autres constructions similaires.J'ai écrit ceci, mais je dois vérifier les méthodes existantes mentionnées pour voir si elles sont meilleures.
la source
return
ligne dans lacase
déclaration souselse
et supprimer tous lesreturn
s.+99
+800
+180000
?Juste pour clarifier la solution d'Andrew Marshall pour utiliser time_ago_in_words
(pour Rails 3.0 et Rails 4.0)
Si vous êtes en vue
Si vous êtes dans un contrôleur
Les contrôleurs n'ont pas le module ActionView :: Helpers :: DateHelper importé par défaut.
NB Ce n'est pas "la voie des rails" pour importer des assistants dans vos contrôleurs. Les aides sont destinées à aider les vues. La méthode time_ago_in_words a été décidée pour être une entité de vue dans la triade MVC . (Je ne suis pas d'accord mais quand on est à Rome ...)
la source
Qu'en est-il de
Ou autre chose que vous visiez?
la source
Vous pouvez utiliser les opérateurs arithmétiques pour faire du temps relatif.
Vous donnera il y a 2 jours.
la source
2.days.since
ou2.days.from_now
Quelque chose comme ça marcherait.
la source
#{diff_seconds/360}
devrait être#{diff_seconds/3600}
. Je l'ai édité.Puisque la plupart des réponses ici suggèrent time_ago_in_words .
À la place d'utiliser :
Dans Rails, préférez:
avec une bibliothèque jQuery http://timeago.yarp.com/ , avec le code:
Avantage principal: mise en cache
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
la source
time_ago_in_words
pas temps SJetez un œil aux méthodes d'instance ici:
http://apidock.com/rails/Time
Cela a des méthodes utiles comme hier, demain, begin_of_week, il y a, etc.
Exemples:
la source
J'ai écrit un bijou qui fait cela pour les objets Rails ActiveRecord. L'exemple utilise created_at, mais il fonctionnera également sur updated_at ou quoi que ce soit avec la classe ActiveSupport :: TimeWithZone.
Installez simplement gem et appelez la méthode 'pretty' sur votre instance TimeWithZone.
https://github.com/brettshollenberger/hublot
la source
Si vous créez une application Rails, vous devez utiliser
Cela vous donne l'heure ou la date dans le fuseau horaire avec lequel vous avez configuré votre application Rails.
Par exemple, si vous configurez votre application pour utiliser UTC, elle
Time.zone.now
sera toujours en heure UTC (elle ne sera pas affectée par le changement de British Summertime par exemple).Le calcul du temps relatif est facile, par exemple
la source
Une autre approche consiste à décharger une partie de la logique du backend et à faire en sorte que le navigateur fasse le travail en utilisant des plugins Javascript tels que:
Il y a jQuery time ou son adaptation Rails Gem
la source