Alter berechnen und RICHTIG runden

Moritz123

Erfahrenes Mitglied
Hallo!

ich lasse mit folgendem Code mein derz. Alter ausrechnen:
PHP:
$jetzt = time();
	$gebdat = mktime(0,0,0,12,01,1983);
	$diff = $jetzt - $gebdat;
	$diff = $diff/60/60/24/365;
	$meinalter0 = round($diff,0);
Nun habe ich natürlich das Problem, dass wenn ich 20,5 Jahre alt bin, schon 21 Jahre angezeigt werden - ist ja klar.
Nun meine Frage: wie runde ich so geschickt, dass nur eine 21 angezeigt wird,, wenn ich auch 21 bin?

Ich habe das jetzt so gelöst, dass ich _gar nicht_ runde, sondern das Ergebnis in einen Array explode und nur die Zahl vor dem Komma ausgebe. Das stellt micgh aber irgendwie nicht zufrieden - gibt es effizientere Wege?

Vielen Dank!
 
Deine Rechnung ist nicht ganz exakt, denn du gehst davon aus, dass jedes Jahr gleich viele Tage hat, was jedoch nicht der Fall ist.
Probleme dürfte es dann kurz vor deinem Geburtstag geben, denn dann dürftest du laut Script schon ein Jahr älter sein als du bist (oder umgekehrt, bin mir grad nicht so sicher).
Wie genau du das umgehen kannst weiß ich jetzt spontan nicht, vor einem Jahr bin ich mal daran verzweifelt und hab es seitdem nich mehr versucht (könnte ich eigentlich mal wieder probieren, ist ja so viel passiert in der Zwischenzeit :))
 
Ich habe mal tief in meiner Script-Kiste gewühlt und da noch eines gefunden, das stimmen sollte! (ein bisschen aufwendiger, als das deine)

hier der Code...
PHP:
<?
$g_tag		= 12;
$g_monat	= 01;
$g_jahr		= 1983;

### Abfrage des heutigen Datums
$n_tag		= date("d");
$n_monat	= date("m");
$n_jahr		= date("Y");

$g_date		= mktime(0,0,0,$g_tag,$g_monat,$g_jahr);

### die Jahre...
if (($n_monat>$g_monat)||(($n_monat == $g_monat)&&($n_tag>$g_tag))||(($n_monat == $g_monat)&&($n_tag==$g_tag))) {
  $alterj	= $n_jahr-$g_jahr; 			// stimmt wenn derjenige schon geb. hatte
} else {
  $alterj	= $n_jahr-$g_jahr-1; 		// stimmt wenn derjenige noch geb. haben wird
}

### jetzt die Monate...
if (($n_monat>$g_monat)||(($n_monat == $g_monat)&&($n_tag>$g_tag))||(($n_monat == $g_monat)&&($n_tag==$g_tag))) {
  $alterm	= $n_monat-$g_monat; 		// stimmt wenn derjenige schon geb. hatte
} else {
  $alterm	= 12-$g_monat+$n_monat; 	// stimmt wenn derjenige noch geb. haben wird
}

### und die Tage...
if (($n_tag>$g_tag)||($n_tag==$g_tag)) {
  $altert	= $n_tag-$g_tag;
} else {
  $tage		= date("t",$g_date);		// ermittelt die max Tage des Geburtstagsmonats (könnte ja ein Schaltjahr gewesen sein)
  $altert	= $tage-$g_tag+$n_tag;		// ermittle die Resttage des Geburtstagsmonats + der schon vergangenen des jetzigen
  $alterm	= $alterm-1;				// zählt dem Monat noch eins ab
}

### jetzt die ausgabe
echo "dein Alter: ".$alterj." Jahre, ".$alterm." Monate und ".$altert." Tage ";
?>
Hoffe dies kann dir helfen!


Greetz and bb
coBraOne
 
Super! Wenn ich das damals gewusst hätte! :rolleyes:
Solche Scripts habe ich sonst nirgens gefunden und dann eben selbst ran müssen... aber eben ist auch schon lange her.

Greetz and bb

cObraOne
 
Zurück