Calcular años mese y dias en acces

Tengo una tabla con una fecha inico y unaa fecha fin. ¿Cómo puedo saber los años, meses y dias que han transcurrido?

1 respuesta

Respuesta
1

Creo que ya te respondí, pero algo falla estos días en la web y no veo mi respuesta, por lo que aquí va otra vez:

Yo uso esta función desde hace tiempo y me va genial:

'--------------------------------------------------------------------------------------------
' Función para calcular la diferencia entre fechas en años, meses y días
'--------------------------------------------------------------------------------------------
Public Function fncDiferenciaFechas(ByVal laFechaIni As Date, ByVal laFechaFin As Date) As String
Dim vAño As Double
Dim vMes As Double
Dim vDia As Double
Dim temp As Date
'Si no se metió alguna de las dos fechas, salimos sin más
If IsNull(laFechaIni) Or IsNull(laFechaFin) Then
    fncDiferenciaFechas = ""
    Exit Function
End If
'Comprobamos que la fecha inicial sea más antigua que la final
If laFechaIni > laFechaFin Then
    temp = laFechaIni
    laFechaIni = laFechaFin
    laFechaFin = temp
ElseIf laFechaIni = laFechaFin Then 'Si las dos fechas son la misma
    fncDiferenciaFechas = "0 días"
    Exit Function
End If
'Calculas la diferencia en años
If Month(laFechaIni) > Month(laFechaFin) Then
    vAño = DateDiff("yyyy", laFechaIni, laFechaFin) - 1
Else
    vAño = DateDiff("yyyy", laFechaIni, laFechaFin)
End If
'Calculas la diferencia en meses
If Day(laFechaIni) > Day(laFechaFin) Then
    vMes = DateDiff("m", DateAdd("yyyy", vAño, laFechaIni), laFechaFin) - 1
    If vMes < 0 Then
        vMes = 12 + vMes
        vAño = vAño - 1
    End If
Else
    vMes = DateDiff("m", DateAdd("yyyy", vAño, laFechaIni), laFechaFin)
End If
'Calculas la diferencia en días
vDia = DateDiff("d", DateAdd("m", vAño * 12 + vMes, laFechaIni), laFechaFin) ' Mod 7
'Construyes la expresión
If vAño = 1 Then
    fncDiferenciaFechas = vAño & " año"
ElseIf vAño > 1 Then
    fncDiferenciaFechas = vAño & " años"
End If
If vMes = 1 Then
    fncDiferenciaFechas = IIf(fncDiferenciaFechas = "", "", fncDiferenciaFechas & " y ") & vMes & " mes"
ElseIf vMes > 1 Then
    fncDiferenciaFechas = IIf(fncDiferenciaFechas = "", "", fncDiferenciaFechas & " y ") & vMes & " meses"
End If
If vDia = 1 Then
    fncDiferenciaFechas = IIf(fncDiferenciaFechas = "", "", fncDiferenciaFechas & " y ") & vDia & " día"
ElseIf vDia > 1 Then
    fncDiferenciaFechas = IIf(fncDiferenciaFechas = "", "", fncDiferenciaFechas & " y ") & vDia & " días"
End If
End Function

Tendrías que pegarla en un módulo independiente de tu BD, y luego la puedes llamar desde donde quieras: informes, consultas, formularios, VBA, macros...

Por ejemplo:

1º/ En una consulta: creas un nuevo campo que sea:

Diferencia: fncDiferenciaFechas([fecha inicio];[fecha fin])

2º/ En un formulario, en un cuadro de texto independiente, le pones como origen de control:

=fncDiferenciaFechas([fecha inicio];[fecha fin])

buenos días.... he incluido el módulo y funciona perfectamente. Lo único es que me contabiliza un día menos, es decir del día 12 al 25 van 14 días y me figura 13 días. Entiendo que no me cuenta el día 12 ¿habrá solución? Mil gracias 

A ver, todo depende de cómo quieras contar los días. Tal como está la función, si pones como fecha inicio el día 13 y como fecha fin también el 13, cuenta 0 días. Si pones como fecha inicio el 13 y fecha fin el 14, cuenta 1 día, y así...

Por lo que dices, tu necesitas que si la fecha inicial y final son la misma, cuente 1 día, si la fecha inicial es el 13 y la final el 14, cuente 3 y así...

Pues eso lo solucionas haciendo dos pequeños cambios en la función:

Donde dice:

ElseIf laFechaIni = laFechaFin Then 'Si las dos fechas son la misma
    fncDiferenciaFechas = "0 días"

pones:

ElseIf laFechaIni = laFechaFin Then 'Si las dos fechas son la misma
    fncDiferenciaFechas = "1 día"

y donde dice:

'Calculas la diferencia en días
vDia = DateDiff("d", DateAdd("m", vAño * 12 + vMes, laFechaIni), laFechaFin) ' Mod 7

pones:

'Calculas la diferencia en días
vDia = DateDiff("d", DateAdd("m", vAño * 12 + vMes, laFechaIni), laFechaFin)+1 ' Mod 7

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas