<?php
date_default_timezone_set('UTC');
echo "Escribe la fecha de tu nacimiento(dia/mes/año):";
//Pedimos valores por la consola.
$fecha=trim(fgets(STDIN));
//Primera verificación del formato.
if(!preg_match("/^\d{1,2}\/\d{1,2}\/\d{2,4}$/", $fecha)) {
die("Formato Incorrecto.\n");
}
//Separamos el string en variables.
list($dia,$mes,$ano)=explode("/", $fecha);
//Verificamos que los valores son correctos.
if(!checkdate($mes, $dia, $ano)) {
die("Los Valores introducidos no son correctos.\n");
}
//Timestamp de la fecha que se inserto.
$cumple=mktime(0, 0, 0, $mes, $dia, $ano);
//Timestamp de el momento actual.
$ahora=time();
//Segundos de vida que tenemos.
$edad=$ahora-$cumple;
//Años que tenemos. la parte entera son los años, la parte decimal son meses y días.
$anos=$edad/60/60/24/365;
//El resto es la parte decimal y para ello restamos la parte entera a $años.
$a_resto=$anos-(int)$anos;
//Si multiplicamos el resto *12 nos da los meses la parte entera y la parte decimal que queda son los días.
$meses=$a_resto*12;
//El resto igual que en $a_resto pero con meses. Así que $m_resto es la parte decimal en donde están los días.
$m_resto=$meses-(int)$meses;
//Multiplicamos el resto *30 y nos quedamos con la parte entera que son los días.
$dias=(int)($m_resto*30);
//Nos quedamos solo con la parte entera.
$anos=(int)$anos;
$meses=(int)$meses;
//Visualizamos el resultado.
echo "$anos año".(($anos>1)?"s":"").", $meses mes".(($meses>1)?"es":"")." y $dias dia".(($dias>1)?"s":"").". \n";
//PD: No puedes ser mucho mas exacto en las mediciones ya que la gran mayoría de gente no sabe la hora exacta y los segundos exactos en los que ha nacido.
?>