Sumar y restar tiempo

330 views
Skip to first unread message

Marcosj54

unread,
Dec 11, 2016, 8:22:50 AM12/11/16
to ror-es
Hola,

Soy un principiantes con Rails (y programación en general). Esty haciendo una microaplicación donde se puede ver máquina A, B, C....que tiene unas horas de uso asignadas al año (180:10) y cada vez que con un formulario inserto que tiempo he usado la máquina, debería de restar de ese total. El problema es que por lo que veo Rails sólo trabaja con horas y minutos de un día (24h) de manera que si los campos de la BBDD y del formulario son :time no puedo hacerlo. Si lo hago como integer no reconoce horas y minutos sino que : lo traduce como una ,

Alguna idea?

Iachetti Federico Martín

unread,
Dec 11, 2016, 8:55:59 AM12/11/16
to ror...@googlegroups.com

Rails le agregó los métodos hours y minutes a Integer. Podrías hacer algo como

total = (180.hours + 50.minutes).to_i                                           
# => 651000                                                                     

horas = 0                                                                       
minutos = 55                                                                    
segundos = 52                                                                   
total -= (horas.hours + minutos.minutes + segundos.seconds).to_i                

total # => 647648

Marcosj54

unread,
Dec 11, 2016, 10:14:45 AM12/11/16
to ror-es
Genial, es justo lo que necesitaba!! Muchas  gracias :-)

Iachetti Federico Martín

unread,
Dec 11, 2016, 11:49:46 AM12/11/16
to ror...@googlegroups.com
Por nada.

También podrías convertir todo de Integer a horas, minutos y segundos usando división.

Una cosa a tener en cuenta: Yo hice la conversión a Integer antes de restar, porque cuando restas horas, minutos y segundos, Rails resta individualmente. O sea que (1 hora y 2 minutos) - (3 minutos) = (1 hora y -1 minuto)
Convirtiendo a integer puedes hacer la cuenta de forma más simple o bien puedes mantener todo en hs, min y seg y hacer la resta "a mano"

Federico Martín Iachetti

--
--
You received this message because you are subscribed to the Google
Groups "ror-es" group.
To post to this group, send email to ror...@googlegroups.com
To unsubscribe from this group, send email to
ror_es+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/ror_es?hl=en
Rails no escala.

---
You received this message because you are subscribed to the Google Groups "ror-es" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ror_es+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Marcosj54

unread,
Jan 8, 2017, 8:50:49 AM1/8/17
to ror-es
Federico,

Sigo dándole vuelta y no logro resolverlo. Mi idea es que en un mismo campo de un formulario se pueda introducir tiempo en formato 02:15 (2h y 15 mins). Después rails si es necesario lo puede pasar a minutos y trabajar con minutos pero luego a la hora de presentárselo al usuario como por ejemplo tiempo total (que se ha guardado varias veces y se ha sumado por ejemplo) se lo devuelva en el mismo formato de hh:mm.

Se te ocurre algo?

GRACIAS

Oinak

unread,
Jan 9, 2017, 11:15:11 AM1/9/17
to ror-es
Por si te vale, me has recordado a un problema similar que es cuando se introduce y muestra moneda con divisiones, pero se almacena en centimos (como la gema money)

class Foo < AR::B
  # el atributo en db es tiempo_en_minutos 
  def tiempo
    h,m = tiempo_en_minutos.divmod(60) # http://ruby-doc.org/core-2.4.0/Numeric.html#method-i-divmod
    "#{h}:#{m}"
  end

  def tiempo=(str)
    h,m = str.split(':')
    tiempo_en_minutos = h * 60 + m
  end
end

¿Se entiende?

Iachetti Federico Martín

unread,
Jan 11, 2017, 12:52:53 PM1/11/17
to ror...@googlegroups.com
Marcos, disculas por la demora en responder (me agarraste justo en vacaciones) 

+1 a la respuesta de Oinak

De paso, gracias Oinak, no conocía divmod =)

Federico Martín Iachetti

--

Marcos Jódar

unread,
Jan 12, 2017, 1:42:00 AM1/12/17
to ror...@googlegroups.com
Muchas gracias a ambos, voy a investigar con esto.

Marcos

Enviado desde mi iPhone

For more options, visit this group at
http://groups.google.com/group/ror_es?hl=en
Rails no escala.

---
You received this message because you are subscribed to a topic in the Google Groups "ror-es" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ror_es/Pf8HeKe9x8U/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ror_es+un...@googlegroups.com.

Oinak

unread,
Jan 13, 2017, 5:35:46 AM1/13/17
to ror-es
De nada hombre, yo llevaba 11 años tirando ruby cuando me lo crucé en el articulo de Sandi Metz de Make everithing the same, (donde lo usa para convertir numerales romanos en arábigos) del que hablo aqui: https://gist.github.com/oinak/683894b18377f4ebed54b03e4938ba76 por si quieres aprovechar el descubrimiento para verlo en acción :-)

For more options, visit this group at
http://groups.google.com/group/ror_es?hl=en
Rails no escala.

---
You received this message because you are subscribed to the Google Groups "ror-es" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ror_es+un...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages