Restar Horas en consulta de Access

Tengo una Consulta en Access con los campos: HoraInicial y HoraFinal y Necesito el resultado de tiempo en números.

Ej: HoraInicial 8:30am Menos HoraFinal 3:30pm =total 435minutos (7 Horas y 45 Minutos)

Necesito el resultado TotalMinutos como el ejemplo en 435

1 respuesta

Respuesta
1

Creo que la diferencia de tiempo de acuerdo con su ejemplo son 420 minutos y no 435. Pruebe con esto:

Datediff("n","08:30 am","03:30 pm") ó también

datediff("n","08:30","15:30")

En ambos casos obtiene 420.

Si quiere utilice está función:

Public Function difminutos(tiempoincial As Date, tiempofinal As Date) As Double
Dim diferencia As Date
' Calculo intervalo de tiempo
diferencia = tiempofinal - tiempoincial

difminutos = Int(CSng(diferencia * 24 * 60))

End Function

Ejemplos:

¿

? Difminutos("8:30 ","15:30") ---> retorna 420

¿

? Difminutos("8:30 am","03:30 pm") --->retorna 420

Hice unos ajustes a la función porque no cubre el cálculo cuando la segunda fecha es al otro día e incluí la conversión de los minutos en Horas y minutos.

Calculo fecha en el mismo dia

CALCULO FECHA HORAL FINAL AL OTRO DIA

Observe que la hora de inicio son a las 10 pm pero finalizó a las 7:15 del siguiente día.

Debe dar formato fecha corta a los controles de Hora inicial y Hora Final.

CÓDIGO DEL BOTÓN CALCULAR

Private Sub btncalcular_Click()

If Not IsDate(Me.ctlinicio) And Not IsDate(Me.ctlfin) Then
MsgBox "Verifique los tiempos", vbInformation, "Calculo Tiempo"
Exit Sub
End If
Me.ctlresultado = difminutos(Me.ctlinicio, Me.ctlfin)
Me.ctlenhoras = convhora(difminutos(Me.ctlinicio, Me.ctlfin))

End Sub

FUNCIONES REQUERIDAS

Public Function convhora(lnminutos As Long) As String

Dim Horas As Long
Horas = lnminutos / 60
lnminutos = lnminutos - (Horas * 60)
convhora = Trim(Str(Horas)) & " horas " & Trim(Str(Abs(lnminutos))) & " minutos"
End Function
Public Function difminutos(tiempoinicial As Date, tiempofinal As Date) As Long
Dim diferencia As Date
If tiempofinal < tiempoinicial Then
tiempofinal = tiempofinal + 1
End If
diferencia = tiempofinal - tiempoinicial

difminutos = Int(CSng(diferencia * 24 * 60))

End Function

Quién le interese el ejemplo puede solicitarlo a [email protected] favor hacer referencia en el asunto sobre la consulta.

Eduardo Pérez

Muchas Gracias.

Un favor adicional. esta información del resultado Me la muestra en el formulario dentro de un cuadro de texto. El 0 Horas 5 Minutos.

Como podría guardar este Valor: 5 Minutos (solo el 5) en la Consulta o en la tabla.

Muchas Gracias.

Hay que modificar la función convhora() para que si no hay horas solo retorne por minutos. Mañana le hago la modificación.

Esta es la nueva función:

Public Function convhora(lnminutos As Long) As String

   Dim Horas As Long
   If lnminutos >= 60 Then
     Horas = lnminutos / 60
    lnminutos = lnminutos - (Horas * 60)
   If Horas >= 1 Then
      convhora = Trim(Str(Horas)) & " horas " & Trim(Str(Abs(lnminutos))) & " minutos"
   End If
Else
convhora = Trim(Str(Abs(lnminutos))) & " minutos"
End If
End Function

Por ejemplo:

¿

? Convhora(55) ----- retorna ---->> 55 minutos

¿

? Convhora(125) ----- retorna----->> 2 horas 5 minutos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas