ACCES antigüedad en años, meses y días en una consulta

Me interesa saber una función que me calcule la antigüedad en años, meses y días de una [fecha ingreso] a la fecha (). Eh buscado por la web pero por el momento solo me ah salido el calculo de años y meses por un código que mostraron en esta pagina web.

He encontrado otras funciones pero me sale error de función o tal vez sea por que no se llamar la función en la consulta, me gustaría que me diera el resultado "antigüedad" a través de una consulta ya que son varios registros para un reporte.

Ejemplo:

Fecha de ingreso antigüedad

01/12/2016                  0 años 6 meses 20 días

01/04/2009                 8 años 2 meses 20 días

Respuesta
1

Gabriel: Tengo una Función que no es mía y creo que originalmente era del Búho.

Public Function DiferenciaFechas(ByVal dtmFecha1 As Date, ByVal dtmFecha2 As Date) As String
Dim dtmFechaMayor As Date
Dim dtmFechaMenor As Date
Dim intAños As Integer
Dim intMeses As Integer
Dim intDias As Integer
If dtmFecha1 >= dtmFecha2 Then
    dtmFechaMayor = dtmFecha1
    dtmFechaMenor = dtmFecha2
Else
    dtmFechaMayor = dtmFecha2
    dtmFechaMenor = dtmFecha1
 End If
'Averiguar cuántos años
intAños = DateDiff("yyyy", dtmFechaMenor, dtmFechaMayor)
'Cambiar el año de la fecha menor al mismo que la fecha mayor
dtmFechaMenor = DateSerial(Year(dtmFechaMayor), Month(dtmFechaMenor), Day(dtmFechaMenor))
 'Averiguar cuántos meses
intMeses = DateDiff("m", dtmFechaMenor, dtmFechaMayor)
'Cambiar el año y el mes de la fecha menor a los mismos que la fecha mayor
dtmFechaMenor = DateSerial(Year(dtmFechaMayor), Month(dtmFechaMayor), Day(dtmFechaMenor))
'Averiguar cuántos días
intDias = DateDiff("d", dtmFechaMenor, dtmFechaMayor)
DiferenciaFechas = intAños & " Años " & intMeses & " Meses y " & intDias & " Días"
End Function

La tenia en un apunte y no he cambiado nada. No obstante en la red, de éste tema hay muca información. Pones VBA Access Calculo edad y verás varios post y algúna Base de Datos. Mis saludos >> Jacinto

Gabriel: Si quieres mirar una Bd con cálculo de tiempo de años, meses, días, horas...,

mira éste enlace>>http://www.mvp-access.es/marciano/#Ejemplos 

El Ejemplo se llama Tiempo transcurrido de Marzo 2008 y con ésta explicación>>

Una propuesta para obtener el tiempo transcurrido entre 2 fechas y horas en forma de Años, Meses, Días, Horas, Minutos y Segundos

Mis saludos >> Jacinto

gracias por sus respuestas y ejemplos compartidos, pero me gustaría que fuera en una consulta ya que seria un listado de 500 a 1000 registros es  para un informe.

por  el momento solo cuento con año y mes. me falta el día.

 UTILIZO ESTE MODULO SOLO ME FALTA QUE CALCULE  LOS DÍAS

Option Compare Database
'--------------------------------------------------------------------------------------------
'Función para calcular la antigüedad de un trabajador en años y meses
Public Function fncAntiguedad(FechaAlta As Date) As String
Dim vAño As Double
Dim vMes As Double
Dim vDia As Double
If IsNull(FechaAlta) Then fncAntiguedad = "": Exit Function
If Month(FechaAlta) > Month(Date) Then

vAño = DateDiff("yyyy", FechaAlta, Date) - 1
Else
vAño = DateDiff("yyyy", FechaAlta, Date)
End If
If Day(FechaAlta) > Day(Date) Then
vMes = DateDiff("m", DateAdd("yyyy", vAño, FechaAlta), Date) - 1
Else
vMes = DateDiff("m", DateAdd("yyyy", vAño, FechaAlta), Date)
End If
Select Case vAño
Case 0
Select Case vMes
Case 0
vDia = DateDiff("d", FechaAlta, Date)
fncAntiguedad = vDia & IIf(vDia = 1, " día", " días")
Case 1
fncAntiguedad = vMes & " mes"
Case Else
fncAntiguedad = vMes & " meses"
End Select
Case 1
Select Case vMes
Case 0
fncAntiguedad = vAño & " año"
Case 1
fncAntiguedad = vAño & " año y " & vMes & " mes"
Case Else
fncAntiguedad = vAño & " año y " & vMes & " meses"
End Select
Case Else
Select Case vMes
Case 0
fncAntiguedad = vAño & " años"
Case 1
fncAntiguedad = vAño & " años y " & vMes & " mes"
Case Else
fncAntiguedad = vAño & " años y " & vMes & " meses"
End Select
End Select
End Function

Gabriel: Al igual que llamas a esa Función desde la Consulta, haz lo mismo con ésta

Public Function FncDiferenciaFechas(ByVal LaFechaIni As Date, ByVal LaFechaFin As Date) As String
'A) En una consulta: Añades una nueva columna y le pones: DiferenciaFechas: FncDiferenciaFechas ([Fecha1];[Fecha2]) >> Fecha1 es la mas ANTIGUA
'B) En un TExtBox independiente en tu Formulario/Informe:
'Una opción sería ponerle la misma expresión en el origen del control del cuadro.
'Otra opción sería que muestre la diferencia al poner las Fechas, en cuyo caso en el evento AfterUpdate de tus Campos Fecha1 y Fecha2, les generas este código:
'If Not IsNull(Me.Fecha1) And Not IsNull(Me.Fecha2) Then
        'Me.Diferencia = FncDiferenciaFechas(Me.Fecha1, Me.Fecha2)
'Else
        'Lo que sea
'End If
'Y le pondrás el mismo código al evento Al Activar Registro del Formulario.
'Obviamente tendrás que cambiar Fecha1, Fecha2 y Diferencia por los Nombres que tú tengas a tus campos.
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  'FncDiferenciaFechas(ByVal laFechaIni As Date, ByVal laFechaFin As Date) As String

Esta función es de Neckkito o Svenvjorn y yo la tengo aplicada y Funciona.

Una muestra:

Mis saludos >> Jacinto

1 respuesta más de otro experto

Respuesta
2

Aunque en la imagen lo veas en el evento Al hacer clic de un botón puedes ponerlo en el evento después de actualizar del cuadro de texto FechaIngreso

Con lo cual, el formulario quedaría

y al pulsar el botón

Lógicamente tendrías que cambiar Fecha por [fecha ingreso]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas