Oui c'est normal car si c'est supérieur à 24, il faut que tu rajoutes 2 années. Il te suffit de remplacer ce code :
if (nouvMM > 12) {
nouvMM = nouvMM - 12;
yyyy += 1;
}
Par
while (nouvMM > 12) {
nouvMM = nouvMM - 12;
yyyy += 1;
}
Et tout fonctionne. Par contre il faut aussi que tu gères le 0 devant les jours car si tu sélectionnes un jour inférieur à 10 ça ne marche pas.
Je me suis permis de réécrire la même fonction mais d'une façon différente car je pense que travailler directement avec l'objet Date c'est mieux. Ca évite notamment d'incrémenter manuellement l'année :
function calculProchaineDate(periodeId, dateDernierEntretienId, dateProchainEntretienId){
var nbrMois = parseInt(document.getElementById(periodeId).value);
var dateDernierEntretien = new Date(Date.parse(document.getElementById(dateDernierEntretienId).value));
dateDernierEntretien.setMonth( dateDernierEntretien.getMonth() + nbrMois);
var year = dateDernierEntretien.getUTCFullYear();
var month = ('0' + (dateDernierEntretien.getUTCMonth() + 1)).slice(-2);
var day = ('0' + dateDernierEntretien.getUTCDate()).slice(-2);
document.getElementById(dateProchainEntretienId).value = year + '-' + month + '-' + day;
} // end function