Hello,
Dans ton script, tu modifie directement la différence de tes dates pour tout tes calculs.
Je m'explique, tu attribue dans un premier temps la différence des deux dates dans dDiff.
Ensuite, pour ton calcul de différence des années, tu utilises la valeur de différence des dates, dDiff.
De même pour les mois, où tu n'utilise pas la différence des deux dates, mais la différence des deux années.
Tu arrives à la fin, pour les secondes, à prendre comme variable la différence des minutes qui est elle même le résultat de la différence des heures etc...
Du coup ce qui est le plus simple, c'est de ne pas réutiliser ta première variable dDiff qui te servira de base pour tes calculs ensuite.
Typiquement, voici le code :
var dateFin = new Date(2010,4,20);
var dateDebut = new Date(2002,2,10);
var duree = (dateFin - dateDebut)/86400000;
var nbAnnee = Math.floor(duree/365.25);
var nbMois = Math.floor(((duree/365.25)-nbAnnee)*12);
var nbJour = Math.floor(((((duree/365.25)-nbAnnee)*12)-nbMois)*30.43);
alert(nbAnnee+" ans, "+nbMois+" mois et "+nbJour+" jours, séparent les deux dates");
Voilà, c'est tout de même beaucoup plus simple :D