Berekenen van leeftijd

Status
Niet open voor verdere reacties.

Isabelle Sels

Gebruiker
Lid geworden
9 sep 2010
Berichten
55
Graag had ik geweten hoe ik velden kan aanmaken met de leeftijd in jaren, maanden, weken en dagen, om dit dan weer te geven in een formulier en/of rapport.

Is hier een mogelijkheid toe?

Met vriendelijke groeten,
Isabelle
 
Met deze functie kun je de leeftijd berekenen:

Code:
Function Leeftijd(varBirthDate As Variant) As Integer
'*************************************************************
' FUNCTIENAAM: Leeftijd()
' DOEL:
'    Leeftijd in jaren berekenen, vanaf een opgegeven datum tot de huidige datum.
' INVOERPARAMETERS:
'    Begindatum: De begindatum (bijvoorbeeld een geboortedatum).
' RESULTAAT
'    De leeftijd in jaren.
'*************************************************************
Dim varAge As Variant

   If IsNull(varBirthDate) Then Leeftijd = 0: Exit Function

   varAge = DateDiff("yyyy", varBirthDate, Now)
   If Date < DateSerial(Year(Now), Month(varBirthDate), Day(varBirthDate)) Then
      varAge = varAge - 1
   End If
   Leeftijd = CInt(varAge)

End Function

Wil je weten hoeoud een persoon is in dagen, maanden etc. dan moet je de functie DateDiff met de parameter M i.p.v. yyyy gebruiken.

Code:
Function AgeMonths(ByVal StartDate As String) As Integer
'*************************************************************
' FUNCTIENAAM: AgeMonths()
' DOEL:
'  Aanvulling van de functie Leeftijd() door berekening van het aantal maanden
'  die zijn verstreken sinds de laatste maand die is opgegeven in de datum.
'  Als de opgegeven datum een verjaardag is, geeft de functie het aantal
'    maanden sinds de laatste verjaardag.
' INVOERPARAMETERS:
'    Begindatum: De begindatum (bijvoorbeeld een verjaardag).
' RESULTAAT
'    Het aantal maanden sinds de laatste verjaardag.
'*************************************************************

   Dim tAge As Double
   tAge = (DateDiff("m", StartDate, Now))
   If (DatePart("d", StartDate) > DatePart("d", Now)) Then
      tAge = tAge - 1
   End If
   If tAge < 0 Then
      tAge = tAge + 1
   End If

   AgeMonths = CInt(tAge Mod 12)

End Function

Voor dagen kun je 'm denk ik nu wel zelf doen :)
 
Is er ook een mogelijkheid om de leeftijd te berekenen in een Query?
Ik zou dan de leeftijd in vb 2 jaar 4 maanden 3 weken en 2 dagen moeten kunnen berekenen.
Dus niet de leeftijd in jaren of maanden of weken of dagen. Maar de exacte leeftijd omgesplitst in x jaren, x maanden, x weken en x dagen.
 
Jammer genoeg is dat niet rechtstreeks in een query te zetten; Excel kent een mogelijkheid om datumformaten te combineren, maar Access helaas niet. Daar heb je dus ook weer een functie voor nodig:

Code:
Public Function CalcAge(dteGeboorteDatum As Date, dteRefDatum As Date) As String
Dim intYears As Integer, intMonths As Integer, intDays As Integer

intMonths = DateDiff("m", dteGeboorteDatum, dteRefDatum)
intDays = DateDiff("d", DateAdd("m", intMonths, dteGeboorteDatum), dteRefDatum)
If intDays < 0 Then
  intMonths = intMonths - 1
  intDays = DateDiff("d", DateAdd("m", intMonths, dteGeboorteDatum), dteRefDatum)
  End If
  intYears = intMonths \ 12
  intMonths = intMonths Mod 12
CalcAge = intYears & " jaar, " & intMonths
If intMonths = 1 Then
    CalcAge = CalcAge & " maand en " & intDays
Else
    CalcAge = CalcAge & " maanden en " & intDays
End If
If intDays = 1 Then
    CalcAge = CalcAge & " dag"
Else
    CalcAge = CalcAge & " dagen"
End If
End Function

Die roep je dan zo aan: Expr2: CalcAge([GeboorteDatum];Date())
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan