• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] Alter in Jahren, Monaten und Tagen berechnen

mo

Administrator
Teammitglied
hi,
habe hier folgendes script
Code:
function getAge($d,$m,$y) {
	$datum = $d.".".$m.".".$y;
	$heute = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
	list ($t1, $m1, $j1) = split('[.]', $datum);
	list ($t2, $m2, $j2) = split('[.]', $heute);
	if ($j1 % 4 != 0 or ($j1 % 100 == 0 and $j1 % 400 != 0)){
		$tf= 28;
	} else {
		$tf = 29;
	}
	$xtage = array( 0, 31, $tf, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	if ($t2 < $t1){
		$t2 += $xtage[(int)$m1];
		$m1 += 1;
	}
	if ($m2 < $m1){
		$m2 += 12;
		$j1 +=1;
	}
	$tage = $t2 - $t1;
	$monate = $m2 - $m1;
	$jahre = $j2 - $j1;
	$alter = array('j'=>$jahre, 'm'=>$monate, 't'=>$tage);
	$alter = $alter['j'] ." Jahre + ". $alter['m'] ." Monate + ". $alter['t']." Tage";
	return $alter;
}
aufruf:
Code:
$alter = getAge("17","06","1973");
ergebnis:
Code:
-1974 Jahre + 6 Monate + 1218319183 Tage

was hab ich übersehen?
 
mal eine frage warum machst du das so kompliziert und errechnest das alter nicht an nd des unixtimestamps?
 
letzten endes ists mir egal, wie ich zu meinem ergebnis komm.
wenn du ne lösung mit nem timestamp hast, ists mir genauso recht.
 
PHP:
function getAge($d,$m,$y) {
	$birth=mktime(0,0,0,$m,$d,$y);
	$yet = time();
	$jahre = (int) date('Y', $yet) - (int) date('Y', $birth);
if ((int) date('md', $birth) > (int) date('md', $yet)) {
    $alter--;
		}
		$monate = (int) date('m', $yet) - (int) date('m', $birth);
		$tage = (int) date('d', $yet) - (int) date('d', $birth);
		if ($tage<0) {
		  $monate--;
			$tage=$tage*(-1);
		}
	print($jahre." Jahre ".$monate." Monate ".$tage." Tage");
}
denke so soltle es passen?

Nachtrag funktionert leider nur bei einem Geburtsdatum ab dem 14.12.1901 :(
 
Zuletzt bearbeitet von einem Moderator:
moin
hab hier nen kleinen fehler:
ausgabe ist z.b. 49 Jahre -3 Monate 11 Tage (am 2008-10-11) wenn ich das geburtsdatum 1959-12-22 übergebe.
wie kann das denn nu sein?
 
Ups, da fehlte noch was und ein Fehler hatte sich eingeschlichen.
Folgendes Script müsste aber stimmen:
PHP:
function getAge($d,$m,$y) {
    $birth=mktime(0,0,0,$m,$d,$y);
    $yet = time();
    $jahre = (int) date('Y', $yet) - (int) date('Y', $birth);
		if ((int) date('md', $birth) > (int) date('md', $yet)) {
        $jahre--;
    }
		$monate = (int) date('m', $yet) - (int) date('m', $birth);
    $tage = (int) date('d', $yet) - (int) date('d', $birth);
    if ($tage<0) {
        $monate--;
        $tage=$tage*(-1);
    }
		if ($monate<0) {
        $monate=$monate+12;
	  }
    print($jahre." Jahre ".$monate." Monate ".$tage." Tage");
}
getAge($day,$month,$year);
 
jou, schaut besser aus. die mitarbeiterin hat sich wieder beruhigt, nachdem sie 1 jahr älter war.. :D
 
Löl die arme, hat sie doch glatt Ihren Geburtstag verpasst ;-)
Aber ist doch besser ein Jahr älter als 1974 Jahre jünger *gg*
 
hallo zusammen, ich habe das für mein script auch mal genutzt, allerdings rechnet der mir 2008-1986=-16
Code:
'AGE' => (int) date('Y', $yet) - $row['geburtsjahr'],
Was ist denn daran falsch?
 
Kannst du etwas mehr Code zeigen, z. B. was in $row['geburtsjahr'] genau drin steht.
 
hier gibts auch probleme, die mitarbeiterin die am 16.10.1969 geburtstag hat, ist auf einmal 40 jahre alt.. scho wieder zoff im büro :D
 
Mmh, sry. Ich schaue mri heute abend das Tool noch einmal an und teste es ;-)
 
Lass dir die Zahlen mal als Echo ausgeben, vllt. ergibt dass dann schon den Fehler
 
Lass dir die Zahlen mal als Echo ausgeben, vllt. ergibt dass dann schon den Fehler

Also ich hab das jetzt mal so gemacht und das funzt ;)
Code:
	    $jetzt = mktime(0,0,0,date("m"),date("d"),date("Y"));
	    $geburtstag = mktime(0,0,0,$monat,$tag,$jahr);
	    $alter   = "(".intval(($jetzt - $geburtstag) / (3600 * 24 * 365)).")";
 
Zurück
Oben