Der einfachste Weg, um die Differenz zwischen zwei Daten zu ermitteln:
var diff = Math.floor((Date.parse(str2) - Date.parse(str1)) / 86400000);
Sie erhalten die Differenztage (oder NaN, wenn einer oder beide nicht geparst werden konnten). Das Parse-Datum liefert das Ergebnis in Millisekunden, und um es als Tag zu erhalten, muss man es teilen durch 24 * 60 * 60 * 1000
Wenn Sie es durch Tage, Stunden, Minuten, Sekunden und Millisekunden teilen möchten:
function dateDiff( str1, str2 ) {
var diff = Date.parse( str2 ) - Date.parse( str1 );
return isNaN( diff ) ? NaN : {
diff : diff,
ms : Math.floor( diff % 1000 ),
s : Math.floor( diff / 1000 % 60 ),
m : Math.floor( diff / 60000 % 60 ),
h : Math.floor( diff / 3600000 % 24 ),
d : Math.floor( diff / 86400000 )
};
}
Hier ist meine umgestaltete Version von James Version:
function mydiff(date1,date2,interval) {
var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7;
date1 = new Date(date1);
date2 = new Date(date2);
var timediff = date2 - date1;
if (isNaN(timediff)) return NaN;
switch (interval) {
case "years": return date2.getFullYear() - date1.getFullYear();
case "months": return (
( date2.getFullYear() * 12 + date2.getMonth() )
-
( date1.getFullYear() * 12 + date1.getMonth() )
);
case "weeks" : return Math.floor(timediff / week);
case "days" : return Math.floor(timediff / day);
case "hours" : return Math.floor(timediff / hour);
case "minutes": return Math.floor(timediff / minute);
case "seconds": return Math.floor(timediff / second);
default: return undefined;
}
}
20 Stimmen
In 99 % der Fälle, in denen der Benutzer nach der "Anzahl der Tage zwischen zwei Daten" fragt, versteht er nicht, dass er versucht, Äpfel mit Birnen zu vergleichen. Das Problem wird so einfach, wenn man fragt: "Wie viele DATEN liegen in einem DATUMSBEREICH?", oder wie viele Quadrate ich auf dem Kalender ankreuzen muss. Die Verwirrung wird uns durch die datetime-Datenstruktur auferlegt, die reiner Unfug ist. Es gibt so etwas wie datetime nicht, es gibt Datum und es gibt Zeit, zwei sehr unterschiedliche Objekte sowohl in der Natur als auch im Verhalten.
0 Stimmen
Für eine Funktion, die die Differenz in (ganze) Zeiteinheiten aufteilt, verwenden Sie die Antwort unter stackoverflow.com/a/53092438/3787376 .
1 Stimmen
Meiner Meinung nach sollte diese Frage gestrichen oder zumindest mit "vermeiden" gekennzeichnet werden, da die meisten Antworten entweder falsch oder von verschiedenen Bibliotheken abhängig sind.
0 Stimmen
@RobG Bibliotheken sind die einzige Option, wenn JavaScript keine integrierte Möglichkeit bietet, es richtig zu machen.
3 Stimmen
@MCEmperor-hardly, der Meistgewählte Antwort besteht nur aus 3 Codezeilen, von denen zwei für das Parsing sind.
0 Stimmen
@RobG Nun, haben Sie den Rest der gleichen Antwort nicht gelesen? Der Poster nennt die Lösung "schnell und schmutzig". Und empfiehlt außerdem eine Datums- und Zeit-API. Während ich darüber sprach, es zu tun rechts . Und für mich hat die Anzahl der Codezeilen nichts damit zu tun, ob man es richtig macht.
0 Stimmen
@MC Emperor - Sie haben sich die Welten schnell und schmutzig angesehen und nicht wirklich geprüft, ob die Antwort richtig war. Es es Richtig, denn schließlich messen wir die Dauer/Intervalle und führen keine Datumsberechnung durch. Das Datum, das in unserem Kalender steht, sollte hingegen mit einer Bibliothek berechnet werden, da diese Dinge wie Schaltjahre und Anpassungen enthält.