Estoy escribiendo una aplicación Rails, pero parece que no puedo encontrar cómo hacer el tiempo relativo, es decir, si se le da una cierta clase de tiempo, puede calcular "hace 30 segundos" o "hace 2 días" o si es más de un mes "1/9/2008", etc.
ruby-on-rails
ruby
John Topley
fuente
fuente
Respuestas:
Parece que está buscando el
time_ago_in_words
método (odistance_of_time_in_words
), de ActiveSupport. Llámalo así:fuente
ActiveSupport
, está definido enActionView::Helpers::DateHelper
.helper
que puede llamar y acceder a estos métodos.helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
Primero, y luego estarás listo para usar7.days.ago
y otras construcciones similares.He escrito esto, pero tengo que verificar los métodos existentes mencionados para ver si son mejores.
fuente
return
dentro delcase
enunciado debajoelse
y eliminar todos losreturn
s.+99
+800
+180000
?Solo para aclarar la solución de Andrew Marshall para usar time_ago_in_words
(Para Rails 3.0 y Rails 4.0)
Si estás en una vista
Si estás en un controlador
Los controladores no tienen el módulo ActionView :: Helpers :: DateHelper importado por defecto.
NB No es "el camino de los rieles" importar ayudantes a sus controladores. Los ayudantes son para ayudar a las vistas. Se decidió que el método time_ago_in_words era una entidad de vista en la tríada MVC . (No estoy de acuerdo, pero cuando en Roma ...)
fuente
Qué pasa
¿O algo más para lo que estabas disparando?
fuente
Puede usar los operadores aritméticos para hacer un tiempo relativo.
Te lo daré hace 2 días.
fuente
2.days.since
o2.days.from_now
Algo como esto funcionaría.
fuente
#{diff_seconds/360}
debería ser#{diff_seconds/3600}
. Lo he editadoComo la mayor respuesta aquí sugiere time_ago_in_words .
En lugar de usar :
En Rails, prefiere:
junto con una biblioteca jQuery http://timeago.yarp.com/ , con el código:
Ventaja principal: almacenamiento en caché
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
fuente
time_ago_in_words
hora SEche un vistazo a los métodos de instancia aquí:
http://apidock.com/rails/Time
Esto tiene métodos útiles como ayer, mañana, comienzo_de_semana, ago, etc.
Ejemplos:
fuente
He escrito una gema que hace esto para los objetos ActiveRecord de Rails. El ejemplo usa created_at, pero también funcionará en updated_at o cualquier cosa con la clase ActiveSupport :: TimeWithZone.
Simplemente instale gem y llame al método 'bonito' en su instancia de TimeWithZone.
https://github.com/brettshollenberger/hublot
fuente
Si está creando una aplicación Rails, debe usar
Esto le da la hora o fecha en la zona horaria con la que ha configurado su aplicación Rails.
Por ejemplo, si configura su aplicación para usar UTC,
Time.zone.now
siempre estará en hora UTC (por ejemplo, no se verá afectado por el cambio de horario de verano británico).Calcular el tiempo relativo es fácil, p. Ej.
fuente
Otro enfoque es descargar algo de lógica del backend y hacer que el navegador haga el trabajo mediante el uso de complementos de Javascript como:
Hace tiempo jQuery o su adaptación de Rails Gem
fuente