Leeftijd bepalen aan de hand van een geboorte datum

Pagina: 1
Acties:
  • 414 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Anoniem: 76157

Topicstarter
Hoi... gister had ik een probleem namelijk ik had een geboorte datum en moest een leeftijd hebben... ik was te lui om een code te schrijven om uit te rekenen hoeveel dagen maanden en jaren die datum geleden was...

dus ik was opzoek gegaan, eerst op php.net bij date... alles wat met date te maken had door gelezen en ik dacht mijn oplossing te hebben gevonden.. mktime() nouja even mktime gebestudeert en kwam er achter dat het pas werkte van af t jaar 1970, probleem, je mag neit ouder zijn dan 33...

ik denken maar lui als ik was raadpleegde ik de search van got tot mijn verbazing hadden redelijk veel mensen deze vraag al eerder gesteld op t forum... topics doorgelezen etc maar geen een oplossing die me aanstond...

dus nog eens gaan denken ik bedacht dat als ik er nou voor zorg dat ik de leeftijd al in jaren heb dan heb ik tog ook geen probleem meer met mktime.... maar helaas bestaat het iets dat schrikkeljaar heet en die waren er al ver voor 1970

ik kon tog geen afstand nemen van dat idee dus ben ik maar gaan coden...
jaarnu-jaargeboorte=leeftijdinjaren probleem als je dit jaar nog jarig moet worden... om dat te kunnen bepalen moest ik gebruik maken van maanden
als maandnu-maandgeboorte kleiner is dan 0 dan leeftijdinjaren-1... logisch
ik door geborduurd op dat idee en kwam tot de conclusie dat als
maandnu-maandgboorte 0 is en als dagnu-daggeboorte 0 is dat je jarig bent als 1 van de 2 kleiner is dan 0 je nog jarig moet worden en groter dat je jarig bent geweest... dit is dus ook mijn oplossing...

ik denk dat deze oplossing al lang bekend is onder de evare coders maar voor die het toch willen weten is hier de code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 function leeftijd($gebdate) {
  global $agejarig;
  global $agejaar;
  
  $vandaagd = date("d");
  $vandaagm = date("m");
  $vandaagy = date("Y");
   
  $gebdate = explode("-", $row->gebd);
  $gebdated = $gebdate[0];
  $gebdatem = $gebdate[1];
  $gebdatey = $gebdate[2];
   
  $v_nugebmaand = $vandaagm-$gebdatem;
  $v_nugebdag = $vandaagd-$gebdated;
   
  if (($v_nugebmaand == "0")&&($v_nugebdag == "0")) {
   $agejarig = "1";
   $agejaar = $vandaagy-$gebdatey;
  } elseif ($v_nugebmaand < "0") {
   $agejarig = "0";
   $agejaar = $vandaagy-$gebdatey-1;
  } elseif (($v_nugebmaand == "0") && ($v_nugebdag < "0")) {
   $agejarig = "0";
   $agejaar = $vandaagy-$gebdatey-1;
  } else {
   $agejarig = "0";
   $agejaar = $vandaagy-$gebdatey;
  };
  
  return $agejaar;
 };


opzich niet zo'n geweldige doorbraak maar wel altijd handig om bij de hand te hebben ik hoop dat iemand er iets aan heeft :) trouwens de code zal misschien nog wel korter kunnen, het is namelijk tijdens het coderen zelf ontstaan dus zonder voor bedachte plannen enzo, ik heb hem ook niet zitten checken op wat anders kan ;) goed is goed tog? trouwens ik heb een tik om engels en nederlands door elkaar te gebruiken :D

grtz Dreamzilla

Acties:
  • 0 Henk 'm!

  • Gert
  • Registratie: Juni 1999
  • Laatst online: 07-11-2024
Is er een reden waarom je dit niet gewoon in je sql statement doet? :o

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Gert schreef op 19 March 2003 @ 22:46:
Is er een reden waarom je dit niet gewoon in je sql statement doet? :o


ja, laten we de database gaan abusen om dit soort dingen uit te rekenen als je verder geen database gebruikt :X

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Anoniem: 50683

hmz, in pseudo code zou ik ongeveer zo doen:
(now retourneert de datum van vandaag )

code:
1
2
3
4
5
6
/* Tel jaren verschil tussen JAAR nu en  JAAR geboorte datum */
AgeJaar = YEAR(NOW) - YEAR(GeboorteDatum)

/* Indien geboortedatum dit jaar nog moet komen, trek er een jaar vanaf */
IF DATE(MONTH(GeboorteDatum), DAY(GeboorteDatum), YEAR(NOW)) > DATE(MONTH(NOW), DAY(NOW), YEAR(NOW))  THEN
   AgeJaar = AgeJaar - 1


En mocht er een sql db gebruikt worden, zou ik dit soort code dus het liefst als stored procedure gebruiken, denk niet dat het verstandig is om dit soort code op te nemen in een select statement.

[ Voor 53% gewijzigd door Anoniem: 50683 op 19-03-2003 22:56 ]


Acties:
  • 0 Henk 'm!

Anoniem: 76157

Topicstarter
nou heb daar een reden voor... ik ken de statement namelijk niet :D mayb is t dom maar ik heb me nooit verdiept in MySQL ik weet alleen hoe ik met een phpMyAdmin een tabel maak met de juiste eigenschappen en hoe dat ik hem weer uitlees :D shame on me :)

maargoed, nog een reden is omdat dit idd een los stukje code is ... er staat niks over mysql in... dus is t te gebruiken in alle php's ?! :)

offtopic:
hoe krijg ik de titel anders... moet namelijk bij dta het over php gaat :D

Acties:
  • 0 Henk 'm!

Anoniem: 37687

Ja,

Of doe het uit je hoofd:

Doomsday Algoritme:
http://www.interlog.com/~r937/doomsday.html

Acties:
  • 0 Henk 'm!

Anoniem: 50683

ik heb ff zitten spelen (ben zelf ook niet helemaal thuis in php):

de datum moet in dit geval wel een timestamp type zijn.
maar het is al een stukje korter :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function leeftijd($gebdate) { 
  $vandaag    = getdate(); 
  $verjaardag = getdate($gebdate);
  $jaren   = $vandaag["year"] - $verjaardag["year"]; 
  if (mktime(0,0,0,  $verjaardag["month"], $verjaardag["mday"], $vandaag["year"]) >
            mktime(0,0,0,  $vandaag["month"], $vandaag["mday"], $vandaag["year"])) {
     $jaren = $jaren - 1;
 };
  return $jaren; 
};

echo leeftijd(strtotime("1971-2-2"));
?>


[edit]
grmbl, lees nu dat stukje over mktime pas goed :'(

Je hebt dus aan die in PHP ingebakken date functies eigenlijk niks, ze zijn bijna allemaal gebaseerd op die unix-timestamp epoch (1970 - 2038) :( :(

[ Voor 71% gewijzigd door Anoniem: 50683 op 20-03-2003 00:16 ]


Acties:
  • 0 Henk 'm!

Anoniem: 76157

Topicstarter
dat bedoelde ik dus ook :) je kunt dan wel met arrays en counts een systeempje maken dat je oneindig terug en verder kunt tellen (ik heb er 1 gemaakt en getest tot op t jaar 0 en 10000 (later in excel na gerekend en t klopte)enigste nadeel is dat t een veel grotere code is en ik heb er erg lang op zitten denken om dat ding in elkaar te zetten

het was voor een online agenda dus daar moet dat wel, je moet bij een agenda kunnen weten wat voor dag het over 20 dagen is ;) opzich is t wel een uitdaging maar als je t al gedaan hebt is het alleen maar vervelend :D
Pagina: 1