differenza di date

per la libreria wedev del tempo, io e mackey abbiamo sviluppato questo prototipo dell'oggetto Date()

codice:
	Date.prototype.sottrai=function(datB) {
		b=(!datB || datB.constructor!=Date)?new Date():datB;
		b.setTime(Math.abs(this.getTime()-b.getTime()));
		b.setFullYear(b.getFullYear()-1970);
		return b;
	}


in sostanza avendo una data settata, possiamo sottrarne un'altra ed ottenerne una terza... ma c'è un problema... provando questo script:

codice:
oggi=new Date(2004,02,05,10,30,00)
nasc=new Date(1987,02,05,10,30,00)
diff=oggi.sottrai(nasc);
la data "diff" dovrebbe essere 01/01/17 0:0:0, invece risulta essere 02/01/17 1:0:0

lo script funziona se vengono aggiunte queste due righe

//b.setHours(b.getHours()-1);
//b.setDate(b.getDate()-1);

ma non è molto logico... qualcuno sa dirmi qualcosa?

grazie