phpbar.de logo

Mailinglisten-Archive

[php] Alter berechnen

[php] Alter berechnen

I.Garbe php_(at)_phpcenter.de
Fri, 29 Mar 2002 11:51:58 +0100


Jan Markmann wrote:

>Ein Ansatz-Vorschlag:
>
>Du berechnest mit mktime() den timestamp seines Geburtstags und ermittelst
>die Differenz zum gegenwärtigen timestamp (kann man mit date() generieren).
>Ist die Differenz weniger als 18 jahre (mussu selbst ausrechnen wieviel das
>genau ist) dann hast du alle Minderjärhigen rausgefiltert.
>
So einfach ist das leider nicht...
Ich habe mal eine Funktion gefunden (gabs glaub ich auf 
www.dynamicwebpages.de bei den Skript-Fetzen ;)), die das Alter eines 
Menschen am heutigen Tag mit Hilfe des Geburtsdatums auf zig 
Nachkommastellen genau berechnet. Ich hab die Funktion dann 
umgeschrieben, dass man das Alter eines Menschen an einem fast 
beliebigen Datum berechnen kann. Ist aber noch nicht perfekt, ich denke 
es wäre nicht so ratsam, ein Datum vor dem Geburtstag zu übergeben ;) Ob 
dann lediglich was negatives rauskommt, weiss ich ned...

Hier ist die Funktion, den ursprünglichen Autor weiss ich leider nicht 
mehr. Aber wer die Funktion verbessert oder Fehler behebt, darf mir 
gerne ein Update schicken, daran bin ich immer interessiert :)

function getAge($birthDate, $datum = '') {

    if ($datum == '') $datum = date("Y-m-d");
    list ($jahr, $monat, $tag) = split("-", $datum);
   
    $nowArray = getdate(mktime(0, 0, 0, $monat, $tag, $jahr));

    $birthArray = explode( "-", strval( $birthDate ) );
    //$nowArray = getdate( time() );
    $nowArray = array( $nowArray['mday'], $nowArray['mon'],
$nowArray['year'] );
    $stichtag = array($birthArray[2], $birthArray[1], $nowArray[2]);
    $tagDifferenz = date("z", gmmktime(12, 0, 0, $nowArray[1],
$nowArray[0], $stichtag[2])) - date("z", gmmktime(12, 0, 0, 
$birthArray[1], $birthArray[2], $stichtag[2]));
    if( ( gmmktime(12, 0, 0, $nowArray[1], $nowArray[0], $nowArray[2] )
- gmmktime(12, 0, 0, $stichtag[1], $stichtag[0], $stichtag[2] ) ) < 0 ) {
        $stichtag = array($birthArray[2], $birthArray[1], ($nowArray[2]-1));
        $tagDifferenz = date("z", gmmktime(12, 0, 0, $nowArray[1],
$nowArray[0], $stichtag[2])) - date("z", gmmktime(12, 0, 0, $birthArray[1],
$birthArray[2], $stichtag[2]));
    }
    if( $tagDifferenz < 0 ) {
        $tagDifferenz = 365 + $tagDifferenz;
    }
    switch( date( "L", gmmktime(12, 0, 0, $stichtag[1], $stichtag[0],
$stichtag[2] ) ) ) {
        case 1:    $tageProJahr = 366;
                break;
        case 0:    $tageProJahr = 365;
                break;
    }
    return ( date("Y", gmmktime(12, 0, 0, $stichtag[1], $stichtag[0],
$stichtag[2] ) ) - date("Y", gmmktime(12, 0, 0, $birthArray[1],
$birthArray[2], $birthArray[0] ) ) ) + ( $tagDifferenz / $tageProJahr );
}


Viel Spass und Erfolg damit!

Gruss,
Ithamar


php::bar PHP Wiki   -   Listenarchive