Estoy tratando de encontrar la mejor manera de generar la siguiente salidaCómo generar un rango de tiempo legible por humanos usando Ruby on Rails
<name> job took 30 seconds
<name> job took 1 minute and 20 seconds
<name> job took 30 minutes and 1 second
<name> job took 3 hours and 2 minutes
empecé este código
def time_range_details
time = (self.created_at..self.updated_at).count
sync_time = case time
when 0..60 then "#{time} secs"
else "#{time/60} minunte(s) and #{time-min*60} seconds"
end
end
¿Existe una forma más eficiente de hacer esto. Parece mucho código redundante para algo súper simple.
Otro uso para esto es:
<title> was posted 20 seconds ago
<title> was posted 2 hours ago
El código para esto es similar, pero en lugar de utilizar i Time.now:
def time_since_posted
time = (self.created_at..Time.now).count
...
...
end
solo curiosidad, ¿por qué es malo? (self.created_at..self.updated_at) .count ¡gracias por la respuesta limpia! – csanz
@csanz: '.count' en ese caso itera a través de una matriz de cada segundo entre las dos marcas de tiempo y las cuenta. Como si calcularas el resultado de la expresión '100-50' contando todos los números entre 50 y 100. –
Prefiero los métodos DateHelper. Si te vas a molestar en convertirlo al inglés, entonces probablemente no quieras combinar días y segundos. Es una precisión artificial. –