Datumswerte in JS sind datetime-Werte.
Direkte Datumsberechnungen sind also inkonsistent:
(2013-11-05 00:00:00) - (2013-11-04 10:10:10) < 1 day
zum Beispiel müssen wir de 2. Datum konvertieren:
(2013-11-05 00:00:00) - (2013-11-04 00:00:00) = 1 day
die Methode könnte sein, die Mühlen in beiden Daten abzuschneiden:
var date1 = new Date('2013/11/04 00:00:00');
var date2 = new Date('2013/11/04 10:10:10'); //less than 1
var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates
console.log(daysDiff);
date2 = new Date('2013/11/05 00:00:00'); //1
var start = Math.floor(date1.getTime() / (3600 * 24 * 1000)); //days as integer from..
var end = Math.floor(date2.getTime() / (3600 * 24 * 1000)); //days as integer from..
var daysDiff = end - start; // exact dates
console.log(daysDiff);
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.