Leeftijd berekenen
DRW - 02/11/2008 12:58
Nieuw 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:
<?
$leeftijd = date("d-m-Y") - $row['birthday'];
?>
<?
$leeftijd = date ( "d-m-Y" ) - $row [ 'birthday' ] ; ?>
Nu 2 datums aftrekken van elkaar zal niet lukken, hoe doe ik dit dan wel?
7 antwoorden
Gesponsorde links
Wim - 02/11/2008 15:43
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...
Kr4nKz1n - 03/11/2008 18:53 (laatste wijziging 03/11/2008 18:55)
Onbekend
Een oud scriptje
/* Functie voor je leetijd */
function leeftijd($input)
{
if(!empty($input))
{
$leeftijd = date("Y")-date("Y",$input);
/* Als je vandaag jarig bent */
if(date("Y",$input) < date("Y") AND date("m",$input) == date("m") AND date("d",$input) == date("d"))
$leeftijd = "Vandaag ".$leeftijd." jaar geworden!";
else
{
if(date("m",$input) > date("m"))
$leeftijd--;
if(date("m",$input) == date("m") AND date("d",$input) > date("d"))
$leeftijd--;
$leeftijd .= " jaar";
}
/* De leeftijd terug geven */
return $leeftijd;
}
}
/* Functie voor je leetijd */
function leeftijd( $input )
{
{
/* Als je vandaag jarig bent */
$leeftijd = "Vandaag " . $leeftijd . " jaar geworden!" ;
else
{
$leeftijd --;
$leeftijd --;
$leeftijd .= " jaar" ;
}
/* De leeftijd terug geven */
return $leeftijd ;
}
}
Nog een oudere script
function numOfLeapDays($from, $to) {
if((checkdate(2,29,date("Y",$from))) && ($from > mktime(0,0,0,2,29,date("Y",$from)))) {
$fromYear = date("Y",$from)+1;
} else {
$fromYear = date("Y",$from);
}
if((checkdate(2,29,date("Y",$to))) && ($to < mktime(0,0,0,2,29,date("Y",$to)))) {
$toYear = date("Y",$to)-1;
} else {
$toYear = date("Y",$to);
}
$numOfLeapDays = 0;
for($i = $fromYear; $i <= $toYear; $i++) {
if ((($i % 4) == 0) AND ((($i % 400) == 0) OR (($i % 100) <> 0))) $numOfLeapDays++;
}
return $numOfLeapDays;
}
function age($born,$now,$bornyear) {
$leapDays = numOfLeapDays($born, $now);
$age = intval(((($now - $born)/(60*60*24)) - $leapDays) / 365 );
if($bornyear < 1970) {
$age = $age + (1970 - $bornyear);
}
return $age;
}
function agenext($birthday){
$datekey = explode("-",$birthday);
$born = mktime(0,0,0,$datekey[1],$datekey[0],$datekey[2]);
$now = mktime(0,0,0,date("m"),date("d"),date("Y"));
$nextbirthday = mktime(0,0,0,$datekey[1],$datekey[0],date("Y"));
if($nextbirthday < $now) {
$nextbirthday = $nextbirthday + (60*60*24*365);
}
$days = intval(($nextbirthday - $now) / (60*60*24));
if(empty($days)){
$agenext = "<b>".age($born,$now,$datekey[2])."</b>, vandaag jarig";
}
else{
$agenext = "<b>".age($born,$now,$datekey[2])."</b> jaar, jarig over ".$days." dag".($days == 1 ? "":"en")."";
}
return $agenext;
}
function numOfLeapDays( $from , $to ) {
$fromYear = date ( "Y" , $from ) + 1 ; } else {
$fromYear = date ( "Y" , $from ) ; }
$toYear = date ( "Y" , $to ) - 1 ; } else {
}
$numOfLeapDays = 0 ;
for ( $i = $fromYear ; $i <= $toYear ; $i ++ ) {
if ( ( ( $i % 4 ) == 0 ) AND ( ( ( $i % 400 ) == 0 ) OR ( ( $i % 100 ) <> 0 ) ) ) $numOfLeapDays ++;
}
return $numOfLeapDays ;
}
function age( $born , $now , $bornyear ) {
$leapDays = numOfLeapDays( $born , $now ) ;
$age = intval ( ( ( ( $now - $born ) / ( 60 * 60 * 24 ) ) - $leapDays ) / 365 ) ; if ( $bornyear < 1970 ) {
$age = $age + ( 1970 - $bornyear ) ;
}
return $age ;
}
function agenext( $birthday ) {
$born = mktime ( 0 , 0 , 0 , $datekey [ 1 ] , $datekey [ 0 ] , $datekey [ 2 ] ) ; $nextbirthday = mktime ( 0 , 0 , 0 , $datekey [ 1 ] , $datekey [ 0 ] , date ( "Y" ) ) ; if ( $nextbirthday < $now ) {
$nextbirthday = $nextbirthday + ( 60 * 60 * 24 * 365 ) ;
}
$days = intval ( ( $nextbirthday - $now ) / ( 60 * 60 * 24 ) ) ; $agenext = "<b>" . age( $born , $now , $datekey [ 2 ] ) . "</b>, vandaag jarig" ;
}
else {
$agenext = "<b>" . age( $born , $now , $datekey [ 2 ] ) . "</b> jaar, jarig over " . $days . " dag" . ( $days == 1 ? "" : "en" ) . "" ;
}
return $agenext ;
}
Gerard - 07/01/2009 11:41
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
CREATE TABLE `user` (
`id` tinyint(1) unsigned NOT NULL auto_increment,
`name` varchar(32) NOT NULL default '',
`birthday` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
--
-- Gegevens worden uitgevoerd voor tabel `user`
--
INSERT INTO `user` VALUES (1, 'Gerard', '1985-07-13');
INSERT INTO `user` VALUES (2, 'Roy', '1988-02-02');
INSERT INTO `user` VALUES (3, 'Vandaag', '2000-01-07');
CREATE TABLE `user` (
`id` tinyint( 1 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`name` varchar( 32 ) NOT NULL DEFAULT '' ,
`birthday` date NOT NULL DEFAULT '0000-00-00' ,
PRIMARY KEY ( `id` )
) ENGINE= MyISAM AUTO_INCREMENT = 4 DEFAULT CHARSET= latin1 AUTO_INCREMENT = 4 ;
--
-- Gegevens worden uitgevoerd voor tabel `user`
--
INSERT INTO `user` VALUES ( 1 , 'Gerard' , '1985-07-13' ) ;
INSERT INTO `user` VALUES ( 2 , 'Roy' , '1988-02-02' ) ;
INSERT INTO `user` VALUES ( 3 , 'Vandaag' , '2000-01-07' ) ;
Query
SELECT name, birthday, FLOOR(PERIOD_DIFF(DATE_FORMAT(CURDATE(), '%Y%m'), DATE_FORMAT(birthday, '%Y%m')) / 12) AS age
FROM user
SELECT name, birthday, FLOOR( PERIOD_DIFF( DATE_FORMAT( CURDATE( ) , '%Y%m' ) , DATE_FORMAT( birthday, '%Y%m' ) ) / 12 ) AS age
FROM user
Gesponsorde links
Dit onderwerp is gesloten .