Du bist nicht angemeldet.

PHP/MySQL Alter berechnen

Lieber Besucher, herzlich willkommen bei: WebStyleBoard. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

1

Dienstag, 10. Mai 2005, 12:15

Alter berechnen

Da ich es für www.devAS.de gebraucht habe ...

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
   $tag      17;
   $monat 5;
   $jahr     1974;

   $alter           date("Y")-$jahr;
   $jetzt           mktime(0,0,0,date("m"),date("d"),date("Y"));
   $geburtstag mktime(0,0,0,$monat,$tag,date("Y"));
   if($jetzt<$geburtstag)$alter -= 1;
   
   echo $alter;
Signatur von »TheNobody Style«

2

Dienstag, 10. Mai 2005, 14:17

ich nutzte diese Funktion:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
function getAge($dayOfBirth){
    list($iDay,$iMonth,$iYear) = explode(".",$dayOfBirth);
    $iCurrentDay date('j');
    $iCurrentMonth date('n');
    $iCurrentYear date('Y');
    if(($iCurrentMonth>$iMonth) || (($iCurrentMonth==$iMonth) && ($iCurrentDay>=$iDay))) {
      $iAlter $iCurrentYear $iYear;
    } else {
      $iAlter $iCurrentYear - ($iYear 1);
    } // end else
    return $iAlter;
}

3

Dienstag, 10. Mai 2005, 14:24

Ich muss sagen, da finde ich TNS' Codeschnipsel aber übersichtlicher... ;)
Signatur von »LapisInfernalis« Eine Milde Gabe...

Der Horizont vieler Menschen ist ein Kreis mit dem Radius Null - und das nennen sie ihren Standpunkt.

Albert Einstein (1879-1955)

A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.
Douglas Adams (1952-2001)

4

Dienstag, 10. Mai 2005, 14:43

und noch einer:

PHP-Quelltext

1
2
3
4
5
6
function getAge($iMonth$iDay$iYear) {
    $iTimeStamp = (mktime() - 86400) - mktime(000$iMonth$iDay$iYear);
    $iDays $iTimeStamp 86400;
    $iYears floor($iDays 365.25);
    return $iYears;
}

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kotzebärchen« (10. Mai 2005, 14:43)


5

Dienstag, 10. Mai 2005, 15:00

@kotzebärchen
Das Problem ist, dass ein Jahr nunmal nicht 365,25 Tage hat ... daher wird dies zu ungenau.

Ich hab bis heute vormittag noch folgenden Code dafür auf devAS.de genutzt:

PHP-Quelltext

1
2
3
4
5
6
7
   $tag 17;
   $mon 5;
   $jah 1974;

   $jetzt mktime(0,0,0,date("m"),date("d"),date("Y"));
   $gebur mktime(0,0,0,$mon,$tag,$jah);
   $alter   intval(($jetzt $gebur) / (3600 24 365));

Laut diesem Codeschnipsel bin ich nun schon 31 Jahre alt ... obwohl ich das erst in ein paar Tagen werde.
Signatur von »TheNobody Style«

6

Dienstag, 10. Mai 2005, 20:43

Dieses Script sollte dir das Alter in Jahren und Tagen geben (noch ungetestet):

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$heute_tag date("d");
$heute_monat date("m");
$heute_jahr date("Y");

$geburt_tag 5;
$geburt_monat 4//dies ist Mai
$geburt_jahr 1983;

if (($heute_monat >= $geburt_monat) && ($heute_tag >= $geburt_tag))
     {
     $jahre $heute_jahr $geburt_jahr;
     $uebrig mktime(000$geburt_monat$geburt_tag$heute_jahr 1)
     $jetzt date();
     $rest $jetzt $uebrig;
     }
else
     {
     $jahre $heute_jahr $geburt_jahr 1;
     $uebrig mktime(000$geburt_monat$geburt_tag$heute_jahr 2)
     $jetzt date();
     $rest $jetzt $uebrig;
     }

$tage floor($rest/(60 60 24));
?>

7

Dienstag, 10. Mai 2005, 21:05

Hi.

Wo wir schon dabei sind :D

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function getAge($bday) {
    $now time();
    if (date("Y"$now) == $bday[0] && date("m"$now) == $bday[1] && date("d"$now) == $bday[2]) {
        $result 0;
    }
    else {
        $result date("Y"$now) - $bday[0];
        if ($bday[1] > date("m"$now)) {
            $result--;
        }
        elseif ($bday[1] == date("m"$now)) {
            if ($bday[2] > date("d",$now)) {
                $result--;
            }
        }
    }
    return $result;
}

$bday = array(
=> 2000,
=> 10,
=> 30
);
echo "Alter: ".getAge($bday);


MfG MaMo

8

Mittwoch, 11. Mai 2005, 09:50

PHP-Quelltext

1
2
3
4
5
6
function get_alter($birth_d$birth_m$birth_y) {
    list($d$m$y) = explode('-'date('d-m-Y'));
    if ($m $birth_m or $d $birth_d)
        return $y $birth_y 1;
    else    return $y $birth_y;
} 
Liefert die gleichen Ergebnisse wie TNS' Schnipsel, ist aber ca. um den Faktor 2,5 schneller, da date nur einmal aufgerufen wird und mktime gar nicht benötigt wird.
Signatur von »mrhappiness« Ich denke, also bin ich. Einige sind trotzdem...

9

Mittwoch, 11. Mai 2005, 10:23

das nenn ich alternativ sinnvoll :)
auch wenn ich glaube, dass der Geschwindigkeitsvorteil im nicht messbaren bereich liegt ... oder mir fehlt dahingehend die Vorstellungskraft :surprised: :)
Signatur von »TheNobody Style«

10

Mittwoch, 11. Mai 2005, 10:41

Messbar oder nicht ist egal, es reicht doch, wenn der Entwickler weiß, dass es schnell ist.
Wenn es gefühlt langsam sein sollte, liegt's zweifelsohne immer an der Hardware *g*
Signatur von »mrhappiness« Ich denke, also bin ich. Einige sind trotzdem...

11

Mittwoch, 11. Mai 2005, 14:07

Wenn du anhand der Datenbank des Einwohnermeldeamtes Köln Name und Alter aller Einwohner ausgeben willst, wirst du den Unterschied eventuell messen können... ;)
Signatur von »Alex« Man muss nichts sehen, um zu sehen, dass man nichts sieht, aber man muss etwas sehen, um zu sehen, was man nicht sieht.

12

Mittwoch, 11. Mai 2005, 15:29

Zitat von »TheNobody Style«

@kotzebärchen
Das Problem ist, dass ein Jahr nunmal nicht 365,25 Tage hat ... daher wird dies zu ungenau.


dann probier das ganze dochmal aus...

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
function getAge($iMonth$iDay$iYear) {
    $iTimeStamp = (mktime() - 86400) - mktime(000$iMonth$iDay$iYear);
    $iDays $iTimeStamp 86400;
    $iYears floor($iDays 365.25);
    return $iYears;
} 

echo getAge(5,10,1986); // --> 18
echo getAge(5,11,1986); // --> gibt zwar noch 18 aus, aber muss man dem tag eben noch eins dazuzählen...
echo getAge(5,12,1986); // --> 19

// auch dein geburtstag klappt:
echo getAge(5,17,1974); // --> 30


also eigentlich doch ziemlich genau. das 365.25 liegt eben an den schalttagen, alle 4 jahre ein tag mehr. muss man halt jetzt nur schauen, welche der ganzen funktionen schneller ist :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kotzebärchen« (11. Mai 2005, 15:31)


13

Mittwoch, 11. Mai 2005, 17:47

Zitat von »Kotzebärchen«

das 365.25 liegt eben an den schalttagen, alle 4 jahre ein tag mehr. muss man halt jetzt nur schauen, welche der ganzen funktionen schneller ist :D
Nein

Schaltjahr = restlos durch 4 teilbar, aber nicht durch 100 und wenn doch durch 100, dann doch bitte auch durch 400
Signatur von »mrhappiness« Ich denke, also bin ich. Einige sind trotzdem...

14

Mittwoch, 11. Mai 2005, 19:33

na is doch egal, hauptsache es funktioniert ;D

15

Mittwoch, 11. Mai 2005, 19:35

aber nicht immer
Signatur von »mrhappiness« Ich denke, also bin ich. Einige sind trotzdem...

16

Mittwoch, 11. Mai 2005, 19:43

wann denn nicht?

17

Mittwoch, 11. Mai 2005, 19:49

Bei dir ist alle 4 Jahre ein Schaltjahr, also z. B.
2004, 2004, 2008, ..., 2100, 2104, ...

2100 ist aber kein Schaltjahr

Steht doch oben schon *g*
Ein Jahr ist ein Schaltjahr, wenn es restlos durch 4 teilbar ist, aber nicht restlos durch 100 teilbar ist.
Ist es restlos durch 100 teilbar, ist es nur genau dann ein Schaltjahr, wenn es auch restlos durch 400 teilbar ist
Signatur von »mrhappiness« Ich denke, also bin ich. Einige sind trotzdem...

18

Mittwoch, 11. Mai 2005, 20:02

also krieg ich erst im jahr 2100 probleme mit meinem code? ^^

19

Mittwoch, 11. Mai 2005, 20:05

Bei Rechnungen, die sich nicht zwischen 1901 und 2099 abspielen

Aber langsamer ist dein Code trotzdem und für Menschen, die am heutigen Tag Geburtstag haben kommt das falsche raus :p
Signatur von »mrhappiness« Ich denke, also bin ich. Einige sind trotzdem...