Direi che e` l'algoritmo ad essere difettoso.
Una data e` un numero complesso, che va affrontato con gli algoritmi appositi.
Non puoi fare semplicemente la differenza di anni, mesi e giorni.
In JS ci sono gli algoritmi per i calcoli con le date, e trovi vari esempi tra gli script utili (in testa al forum), ma forse sono un po' troppo complicati per un principiante.
Direi che hai preso un esempio un po' sbifido per fare le prime esperienze.
Ciao
Michele