Estoy escribiendo una aplicación de Rails, pero parece que no puedo encontrar cómo hacer la hora relativa, es decir, si se le da una determinada clase de tiempo, puede calcular "30 segundos atrás" o "hace 2 días" o si es más larga que un mes "9/1/2008", etc.¿Cómo se hace el tiempo relativo en Rails?
Respuesta
Algo como esto funcionaría.
def relative_time(start_time)
diff_seconds = Time.now - start_time
case diff_seconds
when 0 .. 59
puts "#{diff_seconds} seconds ago"
when 60 .. (3600-1)
puts "#{diff_seconds/60} minutes ago"
when 3600 .. (3600*24-1)
puts "#{diff_seconds/3600} hours ago"
when (3600*24) .. (3600*24*30)
puts "#{diff_seconds/(3600*24)} days ago"
else
puts start_time.strftime("%m/%d/%Y")
end
end
¿Qué hay de
30.seconds.ago
2.days.ago
O algo más que estaban disparando a?
esto está al revés de lo que dice la pregunta. – xaxxon
Parece que está buscando el método time_ago_in_words
(o distance_of_time_in_words
), de ActiveSupport. Llámalo así:
<%= time_ago_in_words(timestamp) %>
Consejos para un novato de ruby sobre cómo ejecutar esto en irb? Ejecuto: requieren 'active_support' y luego prueban 'time_ago_in_words (Time.now)' pero la función no se encuentra. – cboettig
@cboettig No es parte de 'ActiveSupport', se define en' ActionView :: Helpers :: DateHelper'. –
no necesita requerir 'active_support' si se encuentra en una consola de rieles. hay un método de consola llamado 'helper' al que puede llamar y acceder a estos métodos. 'helper.time_ago_in_words (fecha y hora)' –
He escrito esto, pero tengo que verificar los métodos existentes mencionados para ver si son mejores.
module PrettyDate
def to_pretty
a = (Time.now-self).to_i
case a
when 0 then 'just now'
when 1 then 'a second ago'
when 2..59 then a.to_s+' seconds ago'
when 60..119 then 'a minute ago' #120 = 2 minutes
when 120..3540 then (a/60).to_i.to_s+' minutes ago'
when 3541..7100 then 'an hour ago' # 3600 = 1 hour
when 7101..82800 then ((a+99)/3600).to_i.to_s+' hours ago'
when 82801..172000 then 'a day ago' # 86400 = 1 day
when 172001..518400 then ((a+800)/(60*60*24)).to_i.to_s+' days ago'
when 518400..1036800 then 'a week ago'
else ((a+180000)/(60*60*24*7)).to_i.to_s+' weeks ago'
end
end
end
Time.send :include, PrettyDate
Hum, leo primero ruby, y ruby no tengo ActiveSupport listo para usar. Así que creo que esta publicación es más ruby. Sin embargo, en la pregunta real hay una mención de los rieles. – Jonke
Rails es un framework web y el lenguaje subyacente es ruby. Por lo tanto, es normal obtener un código de rubí en una pregunta sobre raíles. Incluso si ruby estándar no incluye ActiveRecord, es compatible con solo un comando "gem install activerecord". – MickaelFM
Puede colocar la última línea de 'return' dentro de la sentencia 'case' bajo' else', y eliminar todos los 'return's. – sawa
Tome un vistazo a los métodos de instancia aquí:
Esto tiene métodos útiles como ayer, mañana, beginning_of_week, hace, etc.
Ejemplos:
Time.now.yesterday
Time.now.ago(2.days).end_of_day
Time.now.next_month.beginning_of_month
He escrito una joya que hace esto para Rails Acti objetos VeRecord. El ejemplo usa created_at, pero también funcionará en updated_at o cualquier cosa con la clase ActiveSupport :: TimeWithZone.
Simplemente joda, instala y llama al método 'bonito' en tu instancia de TimeWithZone.
Solo para aclarar la solución de Andrew Marshall para el uso de time_ago_in_words
(Para Rails 3.0 y Rails 4.0)
Si se encuentra en una vista
<%= time_ago_in_words(Date.today - 1) %>
Si está en un controlador
include ActionView::Helpers::DateHelper
def index
@sexy_date = time_ago_in_words(Date.today - 1)
end
Los controladores no tienen el módulo ActionView::Helpers::DateHelper importado por defecto.
N. B. No es "la manera de los rieles" para importar ayudantes en sus controladores. Los ayudantes son para ayudar a las vistas. Se decidió time_ago_in_words método para ser una entidad de vista en la tríada MVC. (No estoy de acuerdo, pero cuando en Roma ...)
Dado que la mayoría de las respuestas aquí sugiere time_ago_in_words.
En lugar de utilizar:
<%= times_ago_in_words(comment.created_at) %>
En Rails, Prefiero:
<abbr class="timeago" title="<%= comment.created_at.getutc.iso8601 %>">
<%= comment.created_at.to_s %>
</abbr>
alongwith una biblioteca jQuery http://timeago.yarp.com/, con el código:
$("abbr.timeago").timeago();
principal ventaja: El almacenamiento en caché
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
en realidad, es 'time_ago_in_words' no el tiempo ** S ** – 23tux
Otro enfoque es para descargar algo de lógica desde el servidor y el navegador maek hacer el trabajo mediante el uso de plugins de Javascript tales como:
Si usted está construyendo una aplicación Rails , se debe utilizar
Time.zone.now
Time.zone.today
Time.zone.yesterday
Esto le da tiempo o la fecha en la zona horaria con la que se ha configurado su aplicación Rails.
Por ejemplo, si configura su aplicación para usar UTC, entonces Time.zone.now
siempre estará en hora UTC (no se verá afectado por el cambio de horario de verano británico, por ejemplo).
calcular el tiempo relativo es fácil, por ejemplo
Time.zone.now - 10.minute
Time.zone.today.days_ago(5)
- 1. ¿Cómo se analiza el tiempo relativo?
- 2. ¿Cómo se hace el posicionamiento relativo en WPF?
- 3. Tiempo relativo de JavaScript hace 24 horas, etc. como el tiempo
- 4. Marca de tiempo de Javascript a tiempo relativo (por ejemplo, hace 2 segundos, hace una semana, etc.), mejores métodos?
- 5. ¿Hace el ancho de un elemento relativo a su altura?
- 6. ¿Cómo se hace el polimorfismo en Ruby?
- 7. ¿Cómo se calcula el "tiempo atrás" en Java?
- 8. ¿Cómo se hace el multi-arrendamiento en el Proyecto Orchard
- 9. ¿Cómo se hace sobre herramientas aparece durante más tiempo en el IE
- 10. La sesión Rails se destruye cada vez que se hace clic en el enlace destruir modelo
- 11. ¿Cómo se implementa un JMP (x86) relativo en un ensamblador?
- 12. En Ruby on Rails, ¿qué hace authenticate_with_http_basic?
- 13. El proyecto al que se hace referencia se "pierde" en Tiempo de compilación
- 14. Rails 3 - Comparación de tiempo?
- 15. ¿Qué hace el yo en ruby on rails?
- 16. ¿Cómo se hace el código reutilizable?
- 17. Cómo eliminar el desplazamiento relativo en el eje matplotlib
- 18. ¿Cómo se hace el módulo o el resto en Erlang?
- 19. ¿Qué hace la función j en Rails?
- 20. Cómo verificar que la marca de tiempo se hace correctamente para el código firmado
- 21. ¿Cómo manejar el posicionamiento relativo en iOS automáticamente?
- 22. ¿Cómo puedo evitar que las vistas se superpongan en el diseño relativo?
- 23. Cómo alinear verticalmente una posición en el centro: elemento relativo
- 24. ¿Cómo muevo un enlace simbólico relativo?
- 25. ¿Qué es middleware cuando se hace referencia en el contexto de Ruby on Rails?
- 26. Cambiar el diseño relativo programáticamente
- 27. ¿Cómo se hace un rango en Rust?
- 28. ¿Cómo se hace programación genérica en Haskell?
- 29. ¿Cómo se hace select select en gen_servers?
- 30. Cómo forzar LostFocus cuando se hace clic en el botón
'Calcular' parece ser la palabra equivocada, quiso decir 'salida'? – lulalala