Mailinglisten-Archive |
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