Access Lab

Calcular la diferencia entre dos fechas

Claro, con DateDiff cualquiera, ¿no? Pues no. Probemos con estas dos fechas: 9-Dic-96 y 1-Mar-97. DateDiff nos dirá que 1 año si preguntamos por los años, 3 meses si le preguntamos los meses, y si queremos saber los dias nos dice que -8 (en negativo). Una persona humana, después de pensar unos segundos, diría que hay 2 meses, y 23 dias entre las dos fechas (si es informático, también dirá "cero años"). Y si fuera entre el 95 y 96, un dia mas por bisiesto.

Con la siguiente función tienes el problema resuelto. Eso sí, tienes que llamarla por separado para obtener cada una de las partes de la respuesta:

Si eres un poco manitas con VB, puedes modificarla y pasarle un tipo definido por tí para tenerlo todo de una tacada.

Public Function perendat(fecha1, fecha2, tipo)
' tipo: a=años, m=meses, d=dias
Dim ca As Long, cm As Long, cd As Long
Dim f1 As Variant, f2 As Variant
If fecha1 < fecha2 Then
    f1 = fecha1: f2 = fecha2
Else
    f2 = fecha1: f1 = fecha2
End If
ca = DateDiff("yyyy", f1, f2)
If Format(f2, "mmdd") < Format(f1, "mmdd") Then
    ca = ca - 1
End If
cm = DateDiff("m", f1, f2) - (ca * 12)
cd = DateDiff("d", Format(f1, "dd"), Format(f2, "dd"))
If cd < 0 Then
    cm = cm - 1
cd = DateDiff("d", DateSerial(Year(f2), Month(f2) - 1, Day(f1)), f2)
End If
Select Case tipo
Case "d"
    perendat = cd
Case "m"
    perendat = cm
Case "a"
    perendat = ca
End Select
End Function


Volver a AccessLab