Moin!
var Zeit = new Date();
var Zeit2 = new Date(2002,0,15,2,0,0);
var AbsolutJetzt = Zeit.getTime();
var AbsolutDann = Zeit2.getTime();
var Diff = AbsolutDann - AbsolutJetzt;
Bis hierher alles klar. Offenbar verstehst Du, dass getTime() den Wert des Datums als Sekunden seit 1970 zurueckgibt. Aber dann:
Zeit.setTime(Diff);
Warum? Das ist die Umkehrung von getTime(). D.h. Du setzt ein DATUM, nicht etwa eine Zeitdifferenz. Dadurch, dass die Sekunden ja seit 1970 gelten, erklaert sich Deine seltsame Ausgabe.
var Jahr = Zeit.getYear();
if(Jahr < 999) Jahr += 1900;
Nimm einfach getFullYear().
var Stunden = Zeit.getHours();
getHours gibt die Stunden in was zurueck? In der Lokalzeit. Die Sekunden seit 1970 gelten aber in UTC, also britische Zeit (im Winter). Der sind wir hier aber um 1 Stunde voraus, im Sommer sogar 2 Stunden. Daher dann also Deine abweichende Zeitangabe. Schau Dir getUTCHours() an.
Aber: Welches Ergebnis erwartest Du eigentlich bei der Umrechnung? Nehmen wir an, Du hast eine Differenz von
365*24*3600 sec = 31536000 sec. Wieviel ist das umgerechnet? Ein Jahr? Aber wenn heute der 1.1.2004 ist, dann hat das Jahr 366 Tage, die Sekundenanzahl gibt aber nur 1 Tag weniger her. Was willst Du tun? Durch die exakte Zahl der Sekunden eines Jahres, naemlich 365.2422*24*3600 dividieren? Das waere theoretisch richtiger, bringt aber erst recht nicht die erwarteten Resultate. (Z.B. wird die Diff. zw. 1.1.2004 und 1.1.2005 als 1.002074787634 Jahre = 1 Jahr, 18 h, 11 min, 13.9 sec errechnet, die zwischen 1.1.2003 und 1.1.2004 aber nur als 0.9993368783782 Jahre = 365 Tage, also 5 h, 48 min, 46 sec weniger als 1 Jahr. (Rechne einfach mal nach mit 1 Jahr = 365.2422 Tage.))
Hast Du darueber schonmal nachgedacht? Komm, sei ehrlich. ;-) Ich weiss jedenfalls nicht, wie man es korrekt macht.
So long