Estou escrevendo um aplicativo Rails, mas parece que não consigo encontrar um tempo relativo, ou seja, se receber uma determinada classe Time, ele pode calcular "30 segundos atrás" ou "2 dias atrás" ou se for mais de um mês "1/9/2008" etc.
ruby-on-rails
ruby
John Topley
fonte
fonte
Respostas:
Parece que você está procurando o
time_ago_in_words
método (oudistance_of_time_in_words
), do ActiveSupport. Chame assim:fonte
ActiveSupport
, está definido emActionView::Helpers::DateHelper
.helper
que você pode chamar e acessar esses métodos.helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
Primeiro, e então você estará pronto para usar7.days.ago
e outras construções semelhantes.Eu escrevi isso, mas tenho que verificar os métodos existentes mencionados para ver se eles são melhores.
fonte
return
linha nacase
instrução emelse
e remover todos osreturn
s.+99
+800
+180000
?Apenas para esclarecer a solução de Andrew Marshall para usar time_ago_in_words
(For Rails 3.0 e Rails 4.0)
Se você está em uma visão
Se você estiver em um controlador
Os controladores não possuem o módulo ActionView :: Helpers :: DateHelper importado por padrão.
NB Não é "o caminho dos trilhos" importar importadores para seus controladores. Os ajudantes são para ajudar as visualizações. O método time_ago_in_words foi decidido como uma entidade de exibição na tríade MVC . (Eu não concordo, mas quando em Roma ...)
fonte
A respeito
Ou algo mais para o qual você estava filmando?
fonte
Você pode usar os operadores aritméticos para fazer um tempo relativo.
Vai lhe dar 2 dias atrás.
fonte
2.days.since
or2.days.from_now
Algo assim iria funcionar.
fonte
#{diff_seconds/360}
deveria ser#{diff_seconds/3600}
. Eu editei.Como a maioria das respostas aqui sugere time_ago_in_words .
Ao invés de usar :
No Rails, prefira:
junto com uma biblioteca jQuery http://timeago.yarp.com/ , com o código:
Principal vantagem: armazenamento em cache
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
fonte
time_ago_in_words
hora SDê uma olhada nos métodos da instância aqui:
http://apidock.com/rails/Time
Isso tem métodos úteis, como ontem, amanhã, início de semana, atrás etc.
Exemplos:
fonte
Eu escrevi uma jóia que faz isso para objetos Rails ActiveRecord. O exemplo usa created_at, mas também funcionará em updated_at ou qualquer coisa com a classe ActiveSupport :: TimeWithZone.
Basta instalar o gem e chamar o método 'pretty' na sua instância do TimeWithZone.
https://github.com/brettshollenberger/hublot
fonte
Se você estiver criando um aplicativo Rails, use
Isso indica a hora ou a data no fuso horário com o qual você configurou seu aplicativo Rails.
Por exemplo, se você configurar seu aplicativo para usar o UTC,
Time.zone.now
sempre estará no horário UTC (não será afetado pela mudança do horário de verão britânico, por exemplo).Calcular o tempo relativo é fácil, por exemplo
fonte
Outra abordagem é descarregar alguma lógica do back-end e fazer com que o navegador faça o trabalho usando plug-ins Javascript, como:
tempo jQuery atrás ou sua adaptação Rails Gem
fonte