Ciao MAeSI,
ho visitato il link che hai postato e vedo che il problema non è solo mio.
Intanto sono andato avanti col mio test per il calcolo degli anni.
Per il momento lo script è ancora quello che ho mostrato perchè mi sto concentrando sulla formattazione delle date più che sul conteggio degli anni.
Nel passaggio dopo la tmp, trascrivendo le varie parti di data ho aggiunto anche la porzione dell'ora in questa maniera:
codice:
tmp = new Date(1963, 8, 28);
var data3 = new Date(tmp.getFullYear(), tmp.getMonth()-1, tmp.getDate(), 1);
Dopo questa modifica la situazione della data (1991, 1, 29) rimane sempre 1/2/1991 e mi sembra che, come dice br1 non c'è rimedio.
Tuttavia per la data (1963, 08, 28) ora non è più 27/8/1963 ma è diventata quella giusta e cioè 28/8/1963.
Per utilità di quanti si troveranno a leggere questa discussione posterò il codice modificato avvisando che comunque NON E' IDONEO PER IL CALCOLO DELLE ORE, come faceva notare KillerWorm. Per completezza ho aggiunto anche le date da lui suggerito.
codice:
function calculateAge(birthday, now) {
var nowYear = now.getFullYear();
var birtYear = birthday.getFullYear();
var age = nowYear - birtYear;
return age;
}
var oggi = new Date();
var tmp;
tmp = new Date(1947, 1, 12);
var data1 = new Date(tmp.getFullYear(), tmp.getMonth()-1, tmp.getDate(), 1);
tmp = new Date(1991, 1, 29);
var data2 = new Date(tmp.getFullYear(), tmp.getMonth()-1, tmp.getDate(), 1);
tmp = new Date(1963, 8, 28);
var data3 = new Date(tmp.getFullYear(), tmp.getMonth()-1, tmp.getDate(), 1);
tmp = new Date(2015, 12, 31);
var data4 = new Date(tmp.getFullYear(), tmp.getMonth()-1, tmp.getDate(), 1);
var eta1 = calculateAge(data1, oggi);
var eta2 = calculateAge(data2, oggi);
var eta3 = calculateAge(data3, oggi);
var eta4 = calculateAge(data4, oggi);
document.write("tra " + oggi.toLocaleDateString() + " e "
+ data1.toLocaleDateString() + ": <strong>")
document.write(eta1 + " anni</strong><br />");
document.write("tra " + oggi.toLocaleDateString() + " e "
+ data2.toLocaleDateString() + ": <strong>")
document.write(eta2 + " anni</strong><br />");
document.write("tra " + oggi.toLocaleDateString() + " e "
+ data3.toLocaleDateString() + ": <strong>")
document.write(eta3 + " anni</strong><br />");
document.write("tra " + oggi.toLocaleDateString() + " e "
+ data4.toLocaleDateString() + ": <strong>")
document.write(eta4 + " anni</strong><br />");
Il risultato è il seguente:
tra 27/1/2016 e 12/1/1947: 69 anni
tra 27/1/2016 e 1/2/1991: 25 anni // la data non viene interpretata nel modo giusto
tra 27/1/2016 e 28/8/1963: 53 anni // ora la data viene interpretata correttamente
tra 27/1/2016 e 31/12/2015: 1 anni // ovviamente l'anno è sbagliato
Ciao