Non l'ho potuto testare a fondo, quindi non si escludono bachi, comunque prova questo
codice:
//imposto la data di nascita anno/mese/giorno
//per il mese: 0=genn, 1=febbr, 2=marzo ecc...)
nato = new Date(1962,8,10);
//imposto la data di oggi
oggi = new Date();
//calcolo quanti giorni sono passati dividendo i millisecondi trascorsi
//per 86400000 (millisecondi in un giorno)
diff = (oggi - nato)/86400000;
//calcolo da quanti giorni è iniziato l'anno in corso
attuale = new Date(oggi.getFullYear(),0,1);
diffAtt = Math.ceil((oggi - attuale)/86400000);
//calcolo quanti anni sono passati dividendo i giorni totali
//per 1461 cioè 3 anni normali + uno bisestile e moltiplicando per 4
anni = Math.floor(((diff)/1461)*4);
//calcolo i mesi completi dall'ultimo compleanno
if(nato.getMonth() > oggi.getMonth()){
mesi = 12 - ((nato.getMonth() - oggi.getMonth()));
}else{
mesi = ((oggi.getMonth() - nato.getMonth()));
}
if(nato.getDate() > oggi.getDate()){
mesi = mesi - 1;
}
if(mesi == 12){
mesi = 0;
}
//calcolo i giorni dall'ultimo "complemese"
if(oggi.getMonth() == 0){
meseBorn = 11;
annoBorn = oggi.getFullYear() - 1;
}else{
meseBorn = oggi.getMonth() - 1;
annoBorn = oggi.getFullYear();
}
oneAgo = new Date(annoBorn,meseBorn,oggi.getDate());
oldComple = new Date(annoBorn,meseBorn,nato.getDate());
totG = Math.floor((oggi - oneAgo)/86400000);
comple = new Date(oggi.getFullYear(),nato.getMonth(),nato.getDate());
giorni = Math.round(((oggi - oldComple)/86400000));
if(giorni == totG){
giorni = 0;
}else if(giorni > totG){
giorni = giorni - totG;
}
trace("In questo momento ho "+ anni +" anni, "+ mesi +" mesi e "+ giorni +" giorni.");