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

Yo uso esta función:

'--------------------------------------------------------------------------------------------
' 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

La tendrías que pegar en un módulo nuevo de tu BD y luego la llamas donde la necesites.

Por ejemplo, en una consulta, añadirías un nuevo campo así:

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

En un formulario puedes añadir un cuadro de texto y le pones como origen de control:

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

Puede haber otras funciones que te hagan el cálculo, pero a mi esa me funciona de lujo.

Muchas gracias... voy a intentarlo. Pero tengo una gran duda ya que soy un poco torpe y tengo poco conocimiento. Me puedes decir los pasos para pegar y luego llamar a un módulo.  Necesito pegarlo para que funcione la consulta?

Perdona mi ignorancia

En tu BD vas a crear - > otros -> módulo y ahí ya te crea un módulo nuevo. Otra opción es abrir el editor de VBA (Alt+F11 para hacerlo rápido) y vas a Insertar -> módulo.

Una vez que tengas el módulo creado, pegas la función en él. Le das a Guardar, le pones un nombre al módulo (o dejas el que te pone por defecto) y ya puedes usar la función donde quieras.

En tu consulta, donde estarán los campos "fecha inicio" y "fecha fin", en vista diseño, añades una nueva columna y le pones como "campo" lo siguiente:

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

Con lo que al ejecutarla verás un campo llamado "Diferencia" que te mostrará los años, meses y días entre las fechas que contengan esos campos "fecha inicio" y "fecha fin"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas