Allerdings, wenn man es 100% genau nehmen würde, berücksichtigen die Zeitstempel die Zeitzone nicht, da diese immer in GMT sind.

PHP-Code:
if ( $_POST['date_year'] > ( date('Y') -18 ) || 
        ( 
$_POST['date_year'] == ( date('Y') -18 ) && $_POST['date_month'] > date('n') ) || 
        ( 
$_POST['date_year'] == ( date('Y') -18 ) && $_POST['date_month'] == date('n') && $_POST['date_day'] > date('j') ) 
Wenn jemand eine kürzere aber dennoch korrekte Version hat und/oder Fehler an der Version findet, gerne.

Was man basierend auf den Zeitstempeln machen könnte in einer Zeile, wäre etwas der Art:
PHP-Code:
strtotime ("+18 years"mktime(000$_POST['date_month'], $_POST['date_day'], $_POST['date_year']) ) > time() 
Was gar nicht geht, ist in Beitrag #13 , da die Argumente 5&6, Tag & Jahr, der Methode mktime , vertauscht wurden. Wird wohl kaum was sinnvolles bei rauskommen, aber direkt adressierte Kritik ist mir ja nu nicht mehr erlaubt ^^
Also lassen wir das einfach so stehen und freuen uns über jedes Schaltjahr, das vorüberzieht....