Javascript ist Toll!

15. Oktober 2006 - 23:41

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...

Comments (23)
28530 mal gelesen.

23 Kommentare

Leave a comment »

Seiten:

1. Kommentar von: Betatester
8. Juni 2009: 20:40

Was ist mit Schaltjahren?

2. Kommentar von: Struppi
9. Juni 2009: 14:16

Was soll mit denen sein?

3. Kommentar von: Miss Princesz
12. Juni 2009: 12:13

ist das Schaltjahr auch mit eingerechnet?

4. Kommentar von: Struppi
12. Juni 2009: 15:46

Ja, ansonsten wäre das Date() Objekt nutzlos.

5. Kommentar von: philipp
8. Oktober 2009: 18:43

was ist mit dem jahr 01?

6. Kommentar von: Struppi
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.

7. Kommentar von: philipp
1. Februar 2010: 10:15

nein ich meint das jahr 3001. wie ist es damit?

8. Kommentar von: Struppi
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?

9. Kommentar von: Robert
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….

10. Kommentar von: Struppi
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.

11. Kommentar von: minika
4. August 2010: 10:34

Hallo Struppi,

ist ne coole Sache, die du hier kreiert hast :) Respekt!

12. Kommentar von: Herr Matter
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.

13. Kommentar von: Struppi
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.

14. Kommentar von: Rolf
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

15. Kommentar von: Makrele
9. Februar 2011: 11:10

Vielen Dank für diese Berechnungsmöglichkeit. Hat mir sehr geholfen… und umständliche Rechnereien erspart.
DANKE!

16. Kommentar von: chrissy
19. April 2011: 22:46

Danke für diese seite, erspart mir viel nachdenken :b

17. Kommentar von: philipp sander
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

18. Kommentar von: Struppi
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.

19. Kommentar von: ursula1956
18. Januar 2012: 19:13

wüsste auch gerne wie lange ich schon spiele
danke

20. Kommentar von: matze
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

21. Kommentar von: struppi
15. Juli 2014: 23:28

Hmm, bei mir zeigt LibreOffice auch 41.829 Tage an.

22. Kommentar von: mondze
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. Kommentar von: struppi
    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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Powered by WordPress Stop Spam Harvesters, Join Project Honey Pot
rats-wonderful
rats-wonderful
rats-wonderful
rats-wonderful