leeftijd in jaar berekenen tussen een peildatum en een gebortdatum

Status
Niet open voor verdere reacties.

smitty

Gebruiker
Lid geworden
18 okt 2000
Berichten
155
Hoi,
Ik heb de volgende formule in mijn database staan.
Leeftijd: IIf(DateDiff("yyyy";[geboortedatum];#1-8-2011#)>18;"Ouder dan 18";"jonger dan 18")

Maar als ik dan iemand heb die geboren is op 22 maart 1993 komt er toch te staan: jonger dan 18 jaar. Terwijl hij op de peildatum van 1 augustus toch echt 18 jaar is.

Wat doe ik niet goed?
Ik heb het ook geprobeerd met
Leeftijd: IIf(DateDiff("yyyy";[geboortedatum];#1-8-2011#)>=18;"Ouder dan 18";"jonger dan 18")
dus met groter of gelijk aan, maar helaas, hetzelfde resultaat:confused:
 
>18, moet dat niet zijn >= 18?

Oeps, had je al geprobeerd, maar dat moet in ieder geval :)

Ik krijg gewoon 18 uit de expressie. Heb je mogelijk je systeem ingesteld op Amerikaanse tijdsnotatie?
 
Laatst bewerkt:
18

Dat krijg ik ook. Maar als iemand op 2 november jarig(1993 als geboortejaar) is, is ze op de datum 01-08-2011 toch nog geen 18?
 
Klopt, maar als je een exacte benadering wil moet je geen gebruik maken van "YYYY". YYYY geeft het verschil tussen 1 januari van de opgegeven datum met 1 januari van de tweede datum.

Als het exact moet zijn, kun je beter een andere functie gebruiken
 
18

Welke functie zou ik dan moeten gebruiken. Kun jij een beetje op weg helpen?
 
Probeer het hier eens mee:

Code:
Leeftijd: IIf(DateDiff("yyyy";[geboortedatum];DateSerial(2011;8;1))+(Format(DateSerial(2011;8;1);"mmdd")<Format([geboortedatum];"mmdd"))>18;"Ouder dan 18";"jonger dan 18")
 
Laatst bewerkt:
je kunt datediff wel blijven gebruiken, mits je corrigeert voor het deel van het jaar.

Code:
peildatum = #1-8-2011#
verjaarvandaag = DateSerial(Year(peildatum), Month([geboortedatum]), Day([geboortedatum]))
leeftijd = IIf((peildatum - verjaarvandaag < 0), DateDiff("yyyy", [geboortedatum], peildatum) - 1, DateDiff("yyyy", [geboortedatum], peildatum))
 
Niet echt een oplossing die je gelijk in een query kunt gebruiken. Bovendien maak je een extra variabele die je met een datum vult, waarna je diezelfde variabele weer gaat 'ontleden' met allerlei extra functies in DateSerial. Niet erg efficiënt...
 
Helaas, dit werkt ook niet. Bij personen die in 1993 geboren zijn gaat het fout.
 
Probeer deze eens

Code:
IIf(DateDiff("yyyy";[geboortedatum];DateSerial(2011;8;1))+(Format(DateSerial(2011;8;1);"mmdd")>Format([geboortedatum];"mmdd"))>=18;"18 jaar of ouder";"jonger dan 18")

of deze

Code:
IIf(DateDiff("yyyy";[Geboortedatum];DateSerial(2011;8;1))+(DateSerial(2011;Month([Geboortedatum]);Day([Geboortedatum]))>DateSerial(2011;8;1))>=18;"18 jaar of ouder";"jonger dan 18")

Tardis
 
Niet echt een oplossing die je gelijk in een query kunt gebruiken. Bovendien maak je een extra variabele die je met een datum vult, waarna je diezelfde variabele weer gaat 'ontleden' met allerlei extra functies in DateSerial. Niet erg efficiënt...

Is afhankelijk van de opzet. Ik neem aan dat de peildatum variabel moet zijn tenzij je elk jaar de code aan wil gaan passen. Normaal gesproken zou dan de variabele al ergens gevuld zijn.

Ik geef toe dat ik beter meteen ouder of jonger dan 18 terug had kunnen geven, ipv de leeftijd. Dat was wel een stuk makkelijker debuggen. Echter werkt het wel correct met de door Smitty opgegeven usecase.

*edit* de tweede functie van tardis werkt bijna, behalve als peildatum gelijk is aan verjaardag.
 
Laatst bewerkt:
De 2e optie van Tardis werkt. De eerste rekent precies andersom.

Bedankt
 
@Smitty: Wat gaat er precies fout, want bij mij schakelt hij perfect op 1-8. Een persoon met geboortedatum 1-8-1993 komt er uit als 18 of ouder, en met geboortedatum 2-8-1993 is hij jonger. Ik heb, n.a.v. de post van wampier, de ijkdatum gekoppeld aan het huidige jaar, zodat je 'm ook niet meer hoeft aan te passen. Ook nog een extra check ingebouwd op lege velden.

Code:
Leeftijd: IIf([geboortedatum] Is Null;"";IIf(DateDiff("yyyy";[geboortedatum];DateSerial(Year(Date());8;1))+(CInt(Format(DateSerial(2011;8;1);"mmdd"))<CInt(Format([geboortedatum];"mmdd")))<18;"Jonger dan 18";"18 of ouder"))
 
Ha ha, wat een activiteit ineens. Smitty, zie mijn edit in mijn vorige post, er is een uitzondering, tenminste als ik het test.

Octafish, ik kan het ook niet direct vinden, maar bij mij werkt je eerste functie ook niet correct
 
Hoi Otacfish,
Deze werkt perfect. En dat het jaar niet meer aangepast hoeft te worden is ook geweldig.

Bedankt
 
Mag je de vraag nog op <Opgelost> zetten!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan