2010-07-23 19 views
16

Me gustaría escribir una función simple para decir en horas:¿Cómo se resta de una fecha y hora?

¿Cuánto tiempo ha pasado desde que se creó este?

Mis intentos:

-time = DateTime.now.hour - (self.created_at.hour) 

¿Alguien sabe cómo hacer esto en Ruby on Rails?

+0

Eso no funcionará porque solo está comparando horas, por lo que si transcurre más de un día será inexacto, pero de lo contrario todavía debería calcularse a un número. En cambio, podrías hacer 'DateTime.now - self.created_at' directamente, que te dará la diferencia de tiempo en segundos. ¿Qué es lo que hay que hacer? – Karl

+0

Eso no funciona porque no puede restar de DateTime a menos que sea una cadena. Y si se trata de una cadena, ¿cómo se muestra como una vez más – Trip

Respuesta

21

rieles generalmente utiliza Time, no DateTime. ¿Por qué no haces Time.now - self.created_at? Luego puede convertir de segundos a horas dividiendo por 3600.

7

Está buscando la función time_ago_in_words (from_time, include_seconds = false). Estos son algunos ejemplos de los documentos:

time_ago_in_words(3.minutes.from_now)  # => 3 minutes 
time_ago_in_words(Time.now - 15.hours)  # => 15 hours 
time_ago_in_words(Time.now)     # => less than a minute 
from_time = Time.now - 3.days - 14.minutes - 25.seconds  # => 3 days 
+4

No estoy buscando palabras. Estoy buscando cómo restar un DateTime de otro DateTime – Trip

+1

En ese caso, mckeed tiene la respuesta correcta. – sosborn

16

¡Entendido !. Primero debe asegurarse de que sus datos estén en la misma información de la que se restará, ya sea una hora o un horario. Elegí el tiempo. Luego lo divide por los métodos de tiempo incorporados de Ruby. Esto se traduce en cuántos días, pero también puede ser, 1. hora. etc.

(Time.now - self.created_at.to_time)/1.day