[Programmierung] PHP: Alter bestimmen

MasterOD

treuer Stammgast
PHP: Alter bestimmen

wie kann ich in PHP, nach eingabe eines Datums (yyyy-mm-tt) das alter der person bestimmen?
 
Juni 2002 :eek: :eek: :eek:

Warum sehe ich das jetzt erst ???
Vielleicht weil ich damals noch nicht sehr viel mit PHP am Hut hatte.
Der arme MasterOD hat sicher schon eine Lösung gefunden, aber vielleicht interessiert es mal noch jemand.

Datumsberechnungen gehen normalerweise am einfachsten mit Timstamps, da wir aber hier davon ausgehen müssen, das es leute gibt, die vor dem 1.1.1970 geboren sind ;) geht das natürlich nicht.
Also müssen wir das anders lösen.
Hier mal ein komplettes Script:
Code:
<form action="alter.php" method="post">                  //Das Eingabeformular
Tag: <input type="text" name="tag" size="2">
Monat: <input type="text" name="monat" size="2">
Jahr: <input type="text" name="jahr" size="4">
<input type="submit" name="berechnen" value="Berechnen">
</form>

PHP:
<?

if($berechnen)
{
$heute_tag=date("d");            //Aktueller Tag
$heute_monat=date("m");     //Aktueller Monat
$heute_jahr=date("Y");          //Aktuelles Jahr
$jahr_geb=$heute_jahr-$jahr;     //Geburtsjahr vom Aktuellen Jahr Subtrahieren
if (mktime(0,0,0,$heute_monat,$heute_tag,$heute_jahr) < mktime(0,0,0,$monat,$tag,$heute_jahr)) 
//Abfrage ob im aktuellen Jahr der Geburtstag schon überschritten wurde
 {
$jahr_geb--;    //Wenn nicht, dann ein Jahr abziehen
 }
echo $jahr_geb  //Ausgabe
}

?>
 
Es gibt doch sicherlich auch die Möglichkeit den Code soweit zu erweitern das auch der Monat und der die Tage seit dem Geburtstag berechnet werden, oder?

Sollte dann so aussehen: xyz ist 32 Jahre, 4 Monate und 26 Tage alt.

Kann jemand den Code so erweitern??

Gruß
Matze
 
Einen PHP Code dafür kann ich dir leider nicht geben, dafür habe ich hier ein JavaScript mit dem die Taggenaue berechnung des Lebensalters möglich ist:
Code:
<script language="JavaScript">
	function calculate(year, month, day) {
	    var monthname = new Array(12);
		monthname[1] = "January";
		monthname[2] = "February";
		monthname[3] = "March";
		monthname[4] = "April";
		monthname[5] = "May";
        		monthname[6] = "June";
        		monthname[7] = "July";
        		monthname[8] = "August";
        		monthname[9] = "September";
        		monthname[10] = "October";
        		monthname[11] = "November";
        		monthname[12] = "December";

		/* Wochentag berechnen und ausgeben */
        		var bday = " "+ year +", "+monthname[month] + ", "+day;
		var bday = new Date(bday);

		/* Differenz bilden */
		bday = bday.getTime();
		var now = new Date();
		now = now.getTime();
		var diff = now - bday;

		/* Jahre, Monate, Tage ausrechnen */
		var years = (diff - (diff % 31557600000)) / 31557600000;
		diff = diff - (years * 31557600000);
		var months = (diff - (diff % 2628000000)) / 2628000000;
		diff = diff - (months * 2628000000);
    		var days = (diff - (diff % 86400000)) / 86400000;

		if(days > -1) {
	    	  if (years != 0) {
        		  var age = "Mein aktuelles Alter beträgt heute: " + years + " Jahr";
		    if (years > 1) age = age + "e";
		  }
		  if (months != 0) {
        		  age = age + ", " + months + " Monat";
		    if (months > 1) age = age + "e";
		  }
		  if (days != 0) {
        		  age = age + " und " + days + " Tag";
		    if (days > 1) age = age + "e";
		  }
	        }
	        age = age + "!";
	        return age;
         }
         </script>
		/*Geburtsdatum: */
<script language="JavaScript"> document.write(calculate(JAHR,MONAT,TAG)); </script>

Beim Kommentar "Geburtsdatum" müssen natürlich noch die Werte JAHR, MONAT und TAG angepasst werden.
 
Kann man das Script auch mit Daten aus einer Datenbank füttern??
Aber das Script wird sicherlich geblockt bei denen die die JAVA-Scripts blocken, oder??

Bin bei Java-Script absoluter Noob.
 
So hab mir mal eben die Arbeit gemacht jetzt auch ein PHP Script zur Taggenauen Altersbestimmung zu schreiben:
PHP:
<?php
$unixzt = time(); //aktueller Zeitstempel
$unixzt1 = mktime(00,00,00,04,05,1989); //Zeitstempel an Geburtstag
$datum = date("d.m.Y",$unixzt1); //Kontrollumrechnung Zeitstempel ->Datum
  echo $datum." = $unixzt1"; //Ausgabe Kontrollwert
$momjahr= date("Y",$unixzt); //Momentanes Jahr
$mommon= date("m",$unixzt); //Momentaner Monat
$momtag= date("d",$unixzt); //Momentaner Tag

$gebjahr= date("Y",$unixzt1); //Geburtsjahr
$gebmon= date("m",$unixzt1); //Geburtsmonat
$gebtag= date("d",$unixzt1); //Geburtstag

$jahr=$momjahr-$gebjahr; //Differenz zwischen aktuellem Jahr und Geb. Jahr = aktuelles alten in Jahren
$mon=$mommon-$gebmon; //s.o.
$tag=$momtag-$gebtag; //s.o.
echo "<br />";
echo "Ich bin ".$jahr." Jahre, ".$mon." Monate und ".$tag." Tage alt."; //Ausgabe aktuelles Alter
?>
Obwohl ich den Unix Zeitstempel verwende, sind auch Altersbestimmungen von Personen die vor dem 01.01.1970 geboren sind möglich.
Eine Datenbankanbindung dieses Scripts sollte möglich sein.

Hinweis: Das Geburtsdatum muss in der Form mm,tt,jjjj eingegeben werden (ich bin am 5. April 1989 geboren, die Eingabe im Script muss also 00,00,00,04,05,1989 lauten, die sechs vorherstehenden Nullen sind die Uhrzeitangabe.
 
Nicht schlecht, allerdings nicht ganz korrekt.;)

Ich bekomme als Ergebniss:
Ich bin 41 Jahre, 5 Monate und -14 Tage alt
 
Kann es vll sein das du dich bei der Eingabe deines Geburtsdatums vertippt hast?
Bei mir funktioniert das Script einwandfrei:
05.04.1989 = 607730400
Ich bin 17 Jahre, 6 Monate und 7 Tage alt.
 
Nö, nix vertippt.

Aber Du musst bedenken, das der 5. bereits vergangen ist und der 26. (Der Tag meiner Niederkunft:ROFLMAO: ) erst noch kommt.;)

Ich bin also 41 Jahre 4 Monate und 16 Tage alt.

Während es bei Dir auch mit den Monaten aufgeht, funktioniert das in meinem Falle nicht.
 
Stimmt, dieser Denkfehler von mir ist mir grade auch auf gefallen.
Werde heute aber nicht mehr an einr Lösung arbeiten.

Danke für deinen Hinweis :)
 
Ich war mal so frei und habe Dein Script ein wenig modifiziert.:)

Jetzt funktioniert es auch bei meinem Geburtstag.

PHP:
<?php 
$unixzt = time(); //aktueller Zeitstempel 
$unixzt1 = mktime(00,00,00,04,05,1989); //Zeitstempel an Geburtstag 
$datum = date("d.m.Y",$unixzt1); //Kontrollumrechnung Zeitstempel ->Datum 
  echo $datum." = $unixzt1"; //Ausgabe Kontrollwert 
$momjahr= date("Y",$unixzt); //Momentanes Jahr 
$mommon= date("m",$unixzt); //Momentaner Monat 
$momtag= date("d",$unixzt); //Momentaner Tag 

$gebjahr= date("Y",$unixzt1); //Geburtsjahr 
$gebmon= date("m",$unixzt1); //Geburtsmonat 
$gebtag= date("d",$unixzt1); //Geburtstag 

$jahr=$momjahr-$gebjahr; //Differenz zwischen aktuellem Jahr und Geb. Jahr = aktuelles alten in Jahren 
$mon=$mommon-$gebmon; //s.o. 
$tag=$momtag-$gebtag; //s.o. 
//Modifikation
if($tag<0)
{
$mon--; //Bei negativen Tagen, einen Monat abziehen
$a=mktime(00,00,00,$mommon,$momtag,$momjahr)-mktime(00,00,00,$mommon-1,$gebtag,$momjahr); //Berechnung der (Rest)Tage als Timestamp
$tag=$a/86400; //Umrechnung in Tage
}
//Modifikation Ende
echo "<br />"; 
echo "Ich bin ".$jahr." Jahre, ".$mon." Monate und ".$tag." Tage alt."; //Ausgabe aktuelles Alter 
?>

#EDIT
Ergänzend möchte ich noch hinzufügen, das negative Timestamps nicht von allen Plattformen (z.B. Windows) verarbeitet werden können und zu Fehlermeldungen führen.
 
Zuletzt bearbeitet:
Das mit den Negativen Tagen klappt. Nur wie ist das bei negativen Monaten.

Hab z.B. das Geburtsdatum 27.10.2005. Heute ist der 5.3.2007.
Kriege da jetzt 2 Jahre, -8 Monate und 6 Tage raus.

Normal müßte da ja 1 Jahr, 4 Monate und 6 Tage rauskommen.
Wo muß man da den Code modifizieren????
 
Das mit den Negativen Tagen klappt. Nur wie ist das bei negativen Monaten.

Hab z.B. das Geburtsdatum 27.10.2005. Heute ist der 5.3.2007.
Kriege da jetzt 2 Jahre, -8 Monate und 6 Tage raus.

Normal müßte da ja 1 Jahr, 4 Monate und 6 Tage rauskommen.
Wo muß man da den Code modifizieren????

Auch wenn der Thread schon ein paar Tage älter ist, würde mich das mit den negativen Monaten auch interessieren. Hat den niemand eine Lösung?

MfG
 
Herzlich Willkommen im Supernature-Forum!

Quick & dirty hack:
PHP:
//Modifikation Ende 

if($mon < 0){
$jahr = $jahr - 1;
$mon = $mon + 12;}

echo "<br />";

Erste und letzte Zeile im Code sind die Zeilen zwischen denen die Änderung eingebaut werden muss ...
 
Ein Problem habe ich doch noch....
Lokal funzt alles prima jedoch nicht, wenn ich es online auf meinem Webspace teste.
Online sind ca 2 Wochen, die zuviel angezeigt werden. Also wenn es heissen müsste...
"20 Jahre, 2 Monate und 2 Tage" steht dort "20 Jahre, 2 Monate und 16 Tage"
Weis da noch jemand wie man da Abhilfe schaffen kann?
 
Oben