Alter

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Alter

    Also ich habe ein geburtsdatum, zB 19.09.1960!
    Daraus möchte ich nun das Alter in Jahren bestimmen.
    Gibt es irgendwelche einfachen und sinvollen Lösungen?
    /me

  • #2
    Wenn du das Geburtsdatum in einer MySQL Datenbank abgespeichert hast (das Dateformat!) geht es so :
    select ((YEAR(CURRENT_DATE)-YEAR(birthdate)) - (RIGHT(CURRENT_DATE,5)<RIGHT(birthdate,5))) as age FROM tabelle
    (frei kopiert aus dem manual

    Wenn du es nur im europäischen Format vorliegen hast geht es so..
    $jahr = 1960 // mußt du einfach nur irgendwie aus dem String auslesen
    $monat = 9 // dito
    $tag = 19 // dito
    $alter = date(Y)- $jahr;
    if (date(n) < $monat) {
    $jahr = $jahr - 1; // wenn der Geburtsmonat noch nicht erreicht ist
    } else {
    if (date(n) == $monat && date(d) < $tag) {
    $jahr = $jahr - 1;
    }
    else { // optional
    if (date(n) == $monat && date(d) == $tag) {
    echo "Happy Birthday";
    }

    Gibt aber sicher eine einfachere Lösung..so wie beim datenbankformat..fällt mir allerdings nicht ein.

    Kommentar


    • #3
      Code:
      <?
      $gebdate = "01.01.1920";
      $alter = 0; 
      
      // Umbauen Datum in die Form JJJJMMTT
      $gebdt	= explode(".", $gebdate); 
      $gebdt	= $gebdt[2].$gebdt[1].$gebdt[0];
      $now	= date("Ymd", time());
      
      if (substr($now,4) ==  substr($gebdt,4)) {
      	$gratulation = "und hat heute Geburtstag";
      }
      
      if  ($gebdt > $now) {
      	print "Geburtsdatum $gebdate ist ungültig<br>\n";
      } else {
      	WHILE ($gebdt < $now - 9999) { 
      		$alter++; 
      		$gebdt = $gebdt + 10000;
      	}
      	print "Person mit Geburtsdatum $gebdate ist $alter Jahre alt $gratulation<br>\n";
      }
      ?>

      Kommentar


      • #4
        Also wenn Du nur das Alter in Jahre wissen willst, dann:
        <?
        $age=explode(".",$gebdat);
        $alter = date("Y",time())-$age[2];
        ?>

        Wenns aus ner DB im date format kommt dann:
        "SELECT DATE_FORMAT(CURRENT_DATE,"Y") - DATE_FORMAT(COLNAME,"Y") AS age;
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          Da ist dann allerdings ne Toleranz von +/- 364 Tagen dabei...

          CAT Music Files

          Kommentar


          • #6
            stimmt vergesst es...
            so is besser:
            <?
            $gebdat = "1.1.1990";
            $age=explode(".",$gebdat);
            $alt = mktime(0,0,0,$age[1],$age[0],$age[2]);
            $alter = date("Y",time())-date("Y",$alt);
            print $alter;
            ?>


            [Editiert von MelloPie am 06-01-2002 um 20:51]
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Kann das mal einer probieren ob das geht und wenn ja in Codeschnipsel übernehmen ?
              Ich bräuchte das auch noch einmal und dort findet man es schneller wieder.
              Am besten beide Lösungen.

              Kommentar


              • #8
                Original geschrieben von MelloPie
                <?
                $gebdat = "1.1.1990";
                $age=explode(".",$gebdat);
                $alt = mktime(0,0,0,$age[1],$age[0],$age[2]);
                $alter = date("Y",time())-date("Y",$alt);
                print $alter;
                ?>
                Da ist immer noch ein kleiner Denkfehler drin: Du subtrahierst wieder nur die Jahre.

                <?
                $gebdat = "1.1.1990";
                $geb=explode(".",$gebdat);
                //Bis hierhin ist das ok. Aber was jetzt gebraucht wird, ist das aktuelle Datum im gleichen Format:
                $nowdat = date('d.m.Y');
                $now = explode('.', $nowdat);
                // jetzt die Differenz der Jahre:
                $alter = $now[2]-$geb[2];
                // Wenn das Geburtsdatum noch nicht erreicht ist, muss nun noch ein Jahr abgezogen werden:
                if ("$now[1]$now[0]"<"$geb[1][$geb[0]") $alter--;
                //nu stimmt´s
                print $alter;
                ?>
                --------
                aber es gibt (wie meistens) noch eine kürzere Variante:
                <?
                $gebdat = "1.1.1990";
                $now = date ('Ymd');
                $age=explode(".",$gebdat);
                $geb = $age[2]*10000+$age[1]*100+$age[0];
                $alter = floor(($now-$geb)/10000);
                print $alter;
                ?>

                Hier werden die zwei Daten (das aktuelle und der Geburtstag) einfach im Format JJJJMMTT als Zahlen benutzt und von einander abgezogen. Ist das aktuelle Datum (ohne Jahr) kleiner als das Geburtsdatum (ohne Jahr), so wird die Jahresdifferenz schon automatisch um eins verringert.
                Anschließend sorgt die Division durch 10000 und das Abrunden mit floor dafür, dass Monate und Tage wegfallen - bingo!
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  Stimmt globaler Denkfehler aber so sollte es dann doch gehen, oder?
                  <?
                  $gebdat = "1.1.1990";
                  $age=explode(".",$gebdat);
                  $alt = mktime(0,0,0,$age[1],$age[0],$age[2]);
                  $alter = date("Y",time()-$alt);
                  print $alter;
                  ?>
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #10
                    Gibt es die Möglichkeit den Code soweit zu erweitern das auch ausgegeben wird wieviel Monate und Tage seit dem Geburtstag vergangen sind? Z.B. xyz ist 32 Jahre 3 Monate und 10 Tage alt.

                    Kommentar

                    Lädt...
                    X