Suma Diferencia de Tiempos entre dos campos formato hora-

Necesito sumar la diferencia de tiempo que hay entre dos campos con formato de hora sabiendo que el primer campo muestra la hora de entrada de día y el siguiente campo muestra la hora de salida del día siguiente, ejemplo:

21:00 del día frente a la hora de salida 05:00 del día siguiente, equivale a 8 horas.

2 Respuestas

Respuesta
1

Le doy una idea:

Si

  hora_Salida>hora_entrada

    tiempo=hora_Salida-hora_entrada

Sino

   tiempo=hora_salida+24-hora_entrada

Fin_si

Puede utilizar IIF()

¡Gracias! 

Lo resolví en la misma consulta de esta forma:

SiInm([hora salida] Es Nulo;0;SiInm([salida]<[entrada];Redondear(DifFecha("n";[entrada];[salida])/60;1)+24;Redondear(DifFecha("n";[entrada];[salida])/60;1)))

Así era captó bien la idea

Respuesta
1

Las horas son decimales de día, por tanto las 21:00 en decimal es mayor que las 05:00, también en decimal por tanto, vamos a suponer que ese cuadro de texto se llama Dif. En el evento Después de actualizar del cuadro de texto HoraSalida tendrás que poner

If horasalida-horaentrada then

dif=horasalida+1-horaentrada

else

dif=horasalida-horaentrada

end if

Me explico, si la hora de salida es menor que la de entrada le suma 1 día(24 horas) a la de entrada, por el contrario si fuera menor simplemente las resta.

Con respecto a la suma de diferencias, las puedes hacer a "huevo" mientras no sumen 24 horas, a partir de ahí, si no lo haces en código, te dará un valor erróneo porque como ya te he dicho las horas son decimales de día y por tanto cuando supera las 24 h, el ordenador entiende que estás en el día siguiente.

Si quieres, repito, si quieres, mándame un mensaje (sólo el mensaje) a [email protected] y te mando un ejemplo de como puedes hacerlo.

Si lo haces, en el asunto del mensaje pon tu alias Isidro, ya que si no sé quien me escribe ni los abro.

¡Gracias! 

Lo resolví de esta forma dentro de la misma consulta:

SiInm([hora salida] Es Nulo;0;SiInm([salida]<[entrada];Redondear(DifFecha("n";[entrada];[salida])/60;1)+24;Redondear(DifFecha("n";[entrada];[salida])/60;1)))

Eso sólo te da la diferencia entre dos horas, pero permíteme un consejo. No uses nunca las instrucciones de ese tipo en el origen del control de un cuadro de texto, ya que haces que el cuadro de texto sea independiente y luego, cuando quieras hacer cualquier tipo de operación con esa diferencia no tendrás en ningún campo ese valor. Entonces, si el formulario fuera continuo te pondría en todos los cuadros de texto lo mismo. Es preferible dejar como origen de control un campo de una tabla y la instrucción hacerla en código.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas