FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
problema con HoursBetween
Hola que tal, tengo un buen problema que no he podido resolver espero me puedan ayudar, en el sistema que estoy desarrollando tengo problemas con un reporte, se trata de hacer el calculo entre dos horas para sacar el numero de horas trabajadas por un tecnico, lo que pasa que cuando hace el calculo de horas cuando las dos son p.m o a.m si da bien el resultado por ejemplo empezo el trabajo a las 9.00 p.m y termino a las 10.00 p.m es una hora entre esas horas pero cuando existe 10.59 p.m y que termino a la 1.25 a.m el resultado me da que son 21 horas de diferencia entre esas dos horas, utilizo una base de datos de firebird con sql dialect 1, el campo donde almaceno las horas de trabajo son campos doubleprecision, el resultado lo pongo en un campo calculado, el codigo es este:
Última edición por dec fecha: 31-12-2007 a las 15:40:19. |
#2
|
||||
|
||||
Es normal que pase eso, ya que a las 1.25 ya cambió la fecha, pero al considerar solo la hora, se hace la resta y obviamente son 21 horas y pico.
Lo normal, crear campos TIMESTAMP, es decir, fecha y hora todo en el mismo campo. Así al realizar operaciones siempre dará el resultado que esperas. Si ya no puedes cambiar el formato, tendrás que hacer la resta desde las 23:59:59 con las 22:59 y después sumarle 1 hora y 25 minutos. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
||||
|
||||
Estoy de acuerdo con Lepe y creo seria tu mejor opcion ya que si manejas el campo completote puedo ayuda con algo similar a lo que requieres porque me sucedio una eventualidad similar a la tuya..solo que con enfermeras que entran en un dia X a las 9pm por ejemplo y salen al dia siguiente a las 7am.
saludos |
#4
|
|||
|
|||
Tema Resuelto
Gracias lepe y ferrari por su ayuda, estuve unos dias mobiendole a ese problema y nomas nada y lo deje por la paz un rato que hasta ya se me habia olvidado jajajja, ahora despues ya de un buen rato que paso, me puse a pegarle a ese asunto ya lo resolvi lo unico que hice fue comparar las horas en variables double como lo tengo en la base de datos doubleprecision y con esto ya porfin salio
if hentrada > hsalida then begin iqrHorasCALC_HORAS.Value := CompareTime(iqrHorasCALC_HENTRADA.Value,iqrHorasCALC_HSALIDA.Value); end else begin iqrHorasCALC_HORAS.Value := HoursBetween(FloatToDateTime(iqrHorasHENTRADA.AsFloat),FloatToDateTime(iqrHorasHSALIDA.AsFloat)); end; |
#5
|
||||
|
||||
Desde luego, lo más rápido, seguro y cómodo para tí es crear el campo en formato DATE (en dialecto 1 guarda la fecha y hora) y ya solo hacer el cálculo. Todo lo demás creo que es marear la perdiz.
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
|
|