Wieviele Tage sind vergangen?
Die Frage war, wieviele Tage sind seit einem Datum vergangen und kann das Date Objekt auch mit einem Datum vor dem 1.1.1970 umgehen?
Rechnet die Funktion richtig?
Die folgende Funktion berechnet die Differenz in Tagen aus zwei Date Objekten. Das heisst, es wird ein internes Objekt verwendet und die Berechnung beruht auf den Interna von Javascript. Es sollten also alle Schaltjahre berücksichtigt werden
function deltaDays(date1, date2) { if(!(date1 instanceof Date)) throw('Parameter must be an instance of Date!'); if(!(date2 instanceof Date)) throw('Parameter must be an instance of Date!'); var check1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()); var check2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate()); return Math.round(Math.abs(check1 - check2) / (1000 * 60 * 60 * 24 )); } |
Beispiel
Nachtrag (19.4.2010)
Ich habe das Skript leicht geändert, der in den Kommentaren bemerkte Unterschied hing von der Uhrzeit ab, die in der ersten Version des Skriptes in das Ergebnis einfloss. Die aktuell hier dargestellte Version zeigt bei der Berechnung das gleiche Ergebnis an wie z.b. Excel oder OpenCalc. Dürfte also richtig sein.
Nachtrag (23.6.2018)
Die Parameterprüfung angepaßt (s. Kommentare)
ähnliche Artikel
- 18. November 2011 -- LED Editor (1)
LED Scroller Chareditor Dieses Skript dient zum...
- 13. Mai 2009 -- String Erweiterungen (5)
Eine der Eigenschaften von Javascript, die sie von...
- 29. April 2009 -- Online Molmassen Rechner (29)
Ein kleines Javascript aus der Welt der Chemie. Der...
53256 mal gelesen.
23 Kommentare
direkt zum Formular »
Seiten:
8. Juni 2009: 20:40
Was ist mit Schaltjahren?
9. Juni 2009: 14:16
Was soll mit denen sein?
12. Juni 2009: 12:13
ist das Schaltjahr auch mit eingerechnet?
12. Juni 2009: 15:46
Ja, ansonsten wäre das Date() Objekt nutzlos.
8. Oktober 2009: 18:43
was ist mit dem jahr 01?
24. November 2009: 12:10
Du meinst daas Jahr 1901?
Die Differenz zwischen dem 1.1.1901 und dem 1.1.2009 beträgt 39447 und das scheint richtig zu sein.
1. Februar 2010: 10:15
nein ich meint das jahr 3001. wie ist es damit?
1. Februar 2010: 12:15
Ich weiß nicht, was du von mir Wissen willst, auch die Anzahl der Tage wird berechnet. Was soll also damit sein?
21. März 2010: 15:59
Hallo, ich bekomme bei anderen Berechnungsseiten bis zum heutigen Tag 8998 raus hier aber 8999…
Ist hier evtl. ein Fehler drin….
22. März 2010: 9:14
Ich hab versucht welche zu finden, ich finde aber keine anderen Berechnungseiten. Doch im Vergleich zu Open Office rechnet meine Rechung richtig.
Es wäre aber auch hilfreich gewesen, wenn du geschrieben hättest, was du berechnen willst.
4. August 2010: 10:34
Hallo Struppi,
ist ne coole Sache, die du hier kreiert hast :) Respekt!
29. September 2010: 10:08
Danke für die gute Arbeit.
Detail: Ich habe ihr Programm benutzt um die Rechungen meiner Schüler zu überprüfen, dabei haben wir bemerkt, dass bei ihrem Programm das Jahr 2000 als Schaltjahr gerechnet wird, jedes Schaltjahr, dass durch 400 geteilt wird, ist jedoch ausnahmsweise kein Schaltjahr.
29. September 2010: 10:33
Danke, solche Tests braucht man als Programmierer ;-)
Da die Datumsberechnung an sich, nicht von mir kommt, sondern aus dem Date-Objekt von Javascript, gehe ich eigentlich von der Korrektheit aus.
Die Regel ist, soweit ich Wikipedia verstehe, aber umgekehrt. Alle Jahre die durch 100 geteilt werden können sind keine Schaltjahre und die die durch 400 geteilt werden können sind doch welche.
31. Januar 2011: 19:14
Hallo Struppi,
nein, Deine Funktion rechnet nicht richtig, wenn ich als Datum den 31.1.1500 eingebe. Bedenke die Gregorianische Kalenderreform ;-)
Viele Grüße aus Oppenheim,
Rolf
9. Februar 2011: 11:10
Vielen Dank für diese Berechnungsmöglichkeit. Hat mir sehr geholfen… und umständliche Rechnereien erspart.
DANKE!
19. April 2011: 22:46
Danke für diese seite, erspart mir viel nachdenken :b
21. Dezember 2011: 16:28
bedenkst du in deiner rechnung das 1900 KEIN schaltjahr war?
wenn modulo 400 = 0 => schaltjahr
wenn modulo 100 = 0 => kein schaltjahr
wenn modulo 4 = 0 => schaltjahr
22. Dezember 2011: 7:51
Warum fragst du?
„Ich“ berechne das ja nicht, sondern Javascript. Aber du kannst es einfach prüfen, in dem du die Differenz zwischen dem 1.1.1900 und 1.1.1901 berechnest.
18. Januar 2012: 19:13
wüsste auch gerne wie lange ich schon spiele
danke
11. Juli 2014: 1:00
>> Die aktuell hier dargestellte Version zeigt bei der Berechnung das gleiche Ergebnis an wie z.b. […] OpenCalc.
nein, tut sie nicht.
teste mal: 1.1.1900 bis 11.7.2014
hier: 41829
ocalc: 41831
15. Juli 2014: 23:28
Hmm, bei mir zeigt LibreOffice auch 41.829 Tage an.
22. Juni 2018: 23:28
Für die mit Javascript erst anfangen werden merken das man noch die Value ins ein New Date packen muss sonst erscheint: date1.getFullyear() is not a function.
Hier der Code ohne die Fehlermeldung:
//Differenz zwischen zwei Daten
let dateValue1 = new Date(document.getElementById(„input1“).value);
let dateValue2 = new Date(document.getElementById(„input2“).value);
function deltaDays(date1, date2) {
if(!date1 || !date2) return null;
var check1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
var check2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate());
return Math.round(Math.abs(check1 – check2) / (1000 * 60 * 60 * 24 ));
}
console.log(„Differenz: „,deltaDays(dateValue1, dateValue2));
23. Juni 2018: 8:49
Der Funktion müssen zwei Date Objekte übergeben werden das steht auch im Text. War das Missverständlich?
Man hätte das deutlicher machen können, in dem in der Funktion explizit auf das Date Objekt geprüft würde und eine entsprechende Meldung ausgegeben wird.
if(!(date1 instanceof Date)) throw('Parameter must be an instance of Date!');
if(!(date2 instanceof Date)) throw('Parameter must be an instance of Date!');
Das ist aber ein Umsetzungsfrage, hier geht es um den grundsätzlichen Weg, wie man zu einem Ergebnis kommt und das Beispiel funktioniert ja auch.
Nachtrag: Ich habe die Parameterprüfung geändert, Danke für den Hinweis.