In dieser Antwort, die auf einer anderen Antwort beruht (Link am Ende), geht es um den Unterschied zwischen zwei Daten.
Sie können sehen, wie es funktioniert, weil es einfach ist, außerdem beinhaltet es die Aufteilung der Differenz in
Zeiteinheiten (eine Funktion, die ich erstellt habe) und Konvertierung in UTC, um Probleme mit Zeitzonen zu vermeiden.
function date_units_diff(a, b, unit_amounts) {
var split_to_whole_units = function (milliseconds, unit_amounts) {
// unit_amounts = list/array of amounts of milliseconds in a
// second, seconds in a minute, etc., for example "[1000, 60]".
time_data = [milliseconds];
for (i = 0; i < unit_amounts.length; i++) {
time_data.push(parseInt(time_data[i] / unit_amounts[i]));
time_data[i] = time_data[i] % unit_amounts[i];
}; return time_data.reverse();
}; if (unit_amounts == undefined) {
unit_amounts = [1000, 60, 60, 24];
};
var utc_a = new Date(a.toUTCString());
var utc_b = new Date(b.toUTCString());
var diff = (utc_b - utc_a);
return split_to_whole_units(diff, unit_amounts);
}
// Example of use:
var d = date_units_diff(new Date(2010, 0, 1, 0, 0, 0, 0), new Date()).slice(0,-2);
document.write("In difference: 0 days, 1 hours, 2 minutes.".replace(
/0|1|2/g, function (x) {return String( d[Number(x)] );} ));
So funktioniert mein obiger Code
Eine Datums-/Zeitdifferenz in Millisekunden kann mit der Funktion Datum Objekt:
var a = new Date(); // Current date now.
var b = new Date(2010, 0, 1, 0, 0, 0, 0); // Start of 2010.
var utc_a = new Date(a.toUTCString());
var utc_b = new Date(b.toUTCString());
var diff = (utc_b - utc_a); // The difference as milliseconds.
Um dann die Anzahl der Sekunden in dieser Differenz zu berechnen, teilen Sie sie durch 1000, um umzurechnen
Millisekunden in Sekunden ändern, dann das Ergebnis in eine ganze Zahl ändern, um die
die Millisekunden (Bruchteil dieser Dezimalzahl): var seconds = parseInt(diff/1000)
.
Außerdem könnte ich mit demselben Verfahren zum Beispiel längere Zeiteinheiten erhalten:
- (ganz) Minuten dividiert Sekunden durch 60 und ändert das Ergebnis in eine ganze Zahl,
- Stunden dividiert Minuten durch 60 und ändert das Ergebnis in eine ganze Zahl.
Ich habe eine Funktion erstellt, die diesen Prozess der Aufteilung der Differenz in
ganze Zeiteinheiten, genannt split_to_whole_units
mit dieser Demo:
console.log(split_to_whole_units(72000, [1000, 60]));
// -> [1,12,0] # 1 (whole) minute, 12 seconds, 0 milliseconds.
Diese Antwort stützt sich auf diese andere .
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.