Comos sacar la diferencia de días, horas, minutos y segundos entre dos fechas en una consulta

Con una duda referente a fechas, estoy buscando saber el tiempo que transcurre entre dos fechas:

En mi consulta tengo hora de inicio y hora de fin

Ocupe la funcion DifFecha('n',[Inicio],[Fin]) para sacar los minutos entre las dos fechas (columna Minutos)

Tambien reste [Fin]-[Inicio] para sacar los dias, horas, minutos y segundos (columna Horas/minutos) solo puse el formato dd hh:mm:ss en la tabla de propiedades

El problema que tengo es con la columna Horas/Minutos ya que como se ve en la imagen1 renglón 2, dice que pasaron 30 días, cuando no paso ningún día ya que es 22/10/2019 - 22/10/2019.

Si utilizo la función DifFecha ('d' ...) igual me salen 30 días, y yo quiero que salga 0 días.

Alguien podría ayudarme

1 Respuesta

Respuesta
2

Lo más sencillo es que uses una función en VBA que te haga los cálculos, como ésta de Emilio Sancha (http://www.mvp-access.es/emilio/Access/Fechas.asp#TiempoTranscurrido)

Lo único que debes hacer es crear un módulo en tu BD y pegar en él la función:

'*******************************************************************************
'* calcula el tiempo transcurrido entre dos fechas / horas y lo devuelve expresado 
'* en días, horas, minutos y segundos
'* uso: TiempoTranscurrido("15/09/1956", cStr(Now)) 
'* devuelve 16.237 Días, 9 Horas, 58 Minutos y 20 Segundos
'*******************************************************************************
Function TiempoTranscurrido(Inicio As String, Fin As String) as String
Dim lngTotalHoras As Long, _
    lngTotalMinutos As Long, _
    lngTotalSegundos As Long, _
    lngDias As Long, _
    lngHoras As Long, _
    lngMinutos As Long, _
    lngSegundos As Long, _
    dblIntervalo As Double
' calculo el intervalo de tiempo
dblIntervalo = CDate(Fin) - CDate(Inicio)
' lo descompongo en sus partes
lngDias = Int(CSng(dblIntervalo))
lngTotalHoras = Int(CSng(dblIntervalo * 24))         ' total horas en el periodo
lngTotalMinutos = Int(CSng(dblIntervalo * 1440))     ' total minutos en el periodo
lngTotalSegundos = Int(CSng(dblIntervalo * 86400)) ' total segundos en el periodo
lngHoras = lngTotalHoras Mod 24                     ' me quedo solo con los restos
lngMinutos = lngTotalMinutos Mod 60
lngSegundos = lngTotalSegundos Mod 60
' lo devuelvo
TiempoTranscurrido = Format(lngDias, "#,###") & " Días, " & lngHoras & " Horas, " & _
                            lngMinutos & " Minutos y " & lngSegundos & " Segundos"
End Function    ' TiempoTranscurrido

Luego en tu consulta, creas la columna Horas-Minutos así:

Horas-Minutos: TiempoTranscurrido([Inicio];[Fin])

Y listo. 

Si no te gusta le formato de la función de Emilio, modifica la última línea de la función (TiempoTranscurrido=...) para darle el que quieres.

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas