login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Leeftijd berekenen

Offline DRW - 02/11/2008 12:58
Avatar van DRWNieuw lid Hoi,

Ik heb de verjaardag van leden in de DB staan als dd-mm-yyyy. Nu zou ik hiervan de leeftijd willen berekenen.

Simpel voorgesteld:

  1. <?
  2. $leeftijd = date("d-m-Y") - $row['birthday'];
  3. ?>


Nu 2 datums aftrekken van elkaar zal niet lukken, hoe doe ik dit dan wel?

7 antwoorden

Gesponsorde links
Offline Ontani - 02/11/2008 13:00
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
het gemakkelijkste is gebruik te maken van de mysql functie MySQL.com: datediff bij het ophalen van de datum
Offline Wim - 02/11/2008 15:43
Avatar van Wim Crew algemeen
henver schreef:
[..code..]

datediff is toch een veeeeeeeel ordelijkere en makkelijkere manier?

Je script klopt trouwens niet volledig.
Stel, mijn geboortedatum: 10/01/1990
Vandaag is het: 02/11/2008

volgens dit script zou ik dus 17 jaar zijn, terwijl ik naar mijn weten nog steeds 18 ben... Dit enkel omdat het getal van de dag lager is...
Offline DRW - 03/11/2008 16:56
Avatar van DRW Nieuw lid Heb nu aan het proberen geweest met de Datediff() functie, maar krijg deze niet werkend.. Vind nergens een concreet voorbeeld waaruit ik iets zou kunnen halen..  
Offline Wim - 03/11/2008 17:10
Avatar van Wim Crew algemeen http://dev.mysq...n_datediff

thank you google
Offline DRW - 03/11/2008 17:13
Avatar van DRW Nieuw lid Had ik al gezien, maar werkte niet.. Geeft zo'n onduidelijke mysql fout  Zijn die 00:00:00 seconden verplicht? Of kan dit ook werken zonder seconden/uren/minuten?
Offline Kr4nKz1n - 03/11/2008 18:53 (laatste wijziging 03/11/2008 18:55)
Avatar van Kr4nKz1n Onbekend Een oud scriptje
  1. /* Functie voor je leetijd */
  2. function leeftijd($input)
  3. {
  4. if(!empty($input))
  5. {
  6. $leeftijd = date("Y")-date("Y",$input);
  7. /* Als je vandaag jarig bent */
  8. if(date("Y",$input) < date("Y") AND date("m",$input) == date("m") AND date("d",$input) == date("d"))
  9. $leeftijd = "Vandaag ".$leeftijd." jaar geworden!";
  10. else
  11. {
  12. if(date("m",$input) > date("m"))
  13. $leeftijd--;
  14. if(date("m",$input) == date("m") AND date("d",$input) > date("d"))
  15. $leeftijd--;
  16. $leeftijd .= " jaar";
  17. }
  18. /* De leeftijd terug geven */
  19. return $leeftijd;
  20. }
  21. }


Nog een oudere script
  1. function numOfLeapDays($from, $to) {
  2. if((checkdate(2,29,date("Y",$from))) && ($from > mktime(0,0,0,2,29,date("Y",$from)))) {
  3. $fromYear = date("Y",$from)+1;
  4. } else {
  5. $fromYear = date("Y",$from);
  6. }
  7.  
  8. if((checkdate(2,29,date("Y",$to))) && ($to < mktime(0,0,0,2,29,date("Y",$to)))) {
  9. $toYear = date("Y",$to)-1;
  10. } else {
  11. $toYear = date("Y",$to);
  12. }
  13.  
  14. $numOfLeapDays = 0;
  15.  
  16. for($i = $fromYear; $i <= $toYear; $i++) {
  17. if ((($i % 4) == 0) AND ((($i % 400) == 0) OR (($i % 100) <> 0))) $numOfLeapDays++;
  18. }
  19. return $numOfLeapDays;
  20. }
  21.  
  22. function age($born,$now,$bornyear) {
  23. $leapDays = numOfLeapDays($born, $now);
  24. $age = intval(((($now - $born)/(60*60*24)) - $leapDays) / 365 );
  25. if($bornyear < 1970) {
  26. $age = $age + (1970 - $bornyear);
  27. }
  28. return $age;
  29. }
  30.  
  31. function agenext($birthday){
  32.  
  33. $datekey = explode("-",$birthday);
  34.  
  35. $born = mktime(0,0,0,$datekey[1],$datekey[0],$datekey[2]);
  36. $now = mktime(0,0,0,date("m"),date("d"),date("Y"));
  37. $nextbirthday = mktime(0,0,0,$datekey[1],$datekey[0],date("Y"));
  38. if($nextbirthday < $now) {
  39. $nextbirthday = $nextbirthday + (60*60*24*365);
  40. }
  41.  
  42. $days = intval(($nextbirthday - $now) / (60*60*24));
  43. if(empty($days)){
  44. $agenext = "<b>".age($born,$now,$datekey[2])."</b>, vandaag jarig";
  45. }
  46. else{
  47. $agenext = "<b>".age($born,$now,$datekey[2])."</b> jaar, jarig over ".$days." dag".($days == 1 ? "":"en")."";
  48. }
  49. return $agenext;
  50. }
Offline Gerard - 07/01/2009 11:41
Avatar van Gerard Ouwe rakker MySQL.com: DATEDIFF heeft als nadeel dat deze het aantal dagen teruggeeft tussen de 2 opgegeven datums. Je kan deze niet zomaar door 365 delen om het antwoord te krijgen op de vraag.

Zelf maak ik gebruik van onderstaande query. Ik heb voor de volledigheid ook even een test tabel meegeleverd zodat je hem zelf kan testen.

Tabel
  1. CREATE TABLE `user` (
  2. `id` tinyint(1) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `name` varchar(32) NOT NULL DEFAULT '',
  4. `birthday` date NOT NULL DEFAULT '0000-00-00',
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
  7.  
  8. --
  9. -- Gegevens worden uitgevoerd voor tabel `user`
  10. --
  11.  
  12. INSERT INTO `user` VALUES (1, 'Gerard', '1985-07-13');
  13. INSERT INTO `user` VALUES (2, 'Roy', '1988-02-02');
  14. INSERT INTO `user` VALUES (3, 'Vandaag', '2000-01-07');


Query
  1. SELECT name, birthday, FLOOR(PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(birthday, '%Y%m')) / 12) AS age
  2. FROM user
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.261s