Zeitunterschied zwischen zwei Daten in Sekunden abrufen


149

Ich versuche, innerhalb von Sekunden einen Unterschied zwischen zwei Daten zu ermitteln. Die Logik wäre wie folgt:

  • Legen Sie ein Anfangsdatum fest, das jetzt sein würde.
  • Legen Sie ein Enddatum fest, das das Anfangsdatum plus einige Sekunden in der Zukunft sein soll (sagen wir zum Beispiel 15).
  • Holen Sie sich die Differenz zwischen diesen beiden (die Anzahl der Sekunden)

Der Grund, warum ich es mit Datumsangaben mache, ist, dass das endgültige Datum / die endgültige Uhrzeit von einigen anderen Variablen abhängt und nie dasselbe ist (es hängt davon ab, wie schnell ein Benutzer etwas tut) und ich auch das ursprüngliche Datum für andere Dinge speichere.

Ich habe so etwas versucht:

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

Die Sache ist, dass ich nie den richtigen Unterschied bekomme. Ich habe versucht zu teilen, 24 * 60was mich mit den Sekunden belassen würde, aber ich verstehe es nie richtig. Was ist also falsch an meiner Logik? Ich könnte einen dummen Fehler machen, da es ziemlich spät ist, aber es stört mich, dass ich es nicht zum Laufen bringen kann :)


2
Die Reihenfolge der Operationen ist der Schlüssel.
Dylan Cross

1
Sie möchten also einen Zeitstempel haben, 15 Sekunden hinzufügen und dann sehen, was der Unterschied in Sekunden ist. Ich würde sagen, die Chancen stehen gut, dass der Unterschied sein wird ... warte darauf ... 15 Sekunden?
Adeneo


1
Ich verstehe wirklich, was Sie versuchen (glaube ich), aber wenn Sie ein neues Datum () nehmen, das derzeit die Unix-Zeit ist, fügen Sie 15 Sekunden hinzu und überprüfen Sie sofort den Unterschied, der Unterschied beträgt 15 Sekunden (abzüglich der Millisekunden, die für die Berechnung benötigt wurden), aber ich vermute, Sie beabsichtigen, dies in Zukunft irgendwie zu vergleichen.
Adeneo

1
Ich verstehe es nicht wirklich, um meinen Standpunkt zu beweisen, hier ist ein funktionierendes FIDDLE für Ihr obiges Beispiel. Wenn Sie herausfinden möchten, wie lange der Benutzer gebraucht hat, um etwas zu tun, erhalten Sie normalerweise den Zeitstempel, wenn der Benutzer den Vorgang startet, und den Zeitstempel, wenn der Benutzer den Vorgang beendet hat. Vergleichen Sie diese, und Sie wissen, wie lange es gedauert hat . Wofür zum Teufel sind die 15 Sekunden?
Adeneo

Antworten:


283

Der Code

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

Oder noch einfacher, (endDate - startDate) / 1000wie in den Kommentaren erwähnt, es sei denn, Sie verwenden Typoskript.


Die Erklärung

Sie müssen die getTime()Methode für die DateObjekte aufrufen und sie dann einfach subtrahieren und durch 1000 dividieren (da dies ursprünglich in Millisekunden erfolgt). Wenn Sie die getDate()Methode aufrufen , erhalten Sie den Tag des Monats als Ganzzahl zwischen 1 und 31 (nicht auf Null basierend), im Gegensatz zu der Epochenzeit, die Sie durch das Aufrufen der getTime()Methode erhalten würden. Dies entspricht der Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00 Uhr


Schimpfen

Abhängig von Ihren datumsbezogenen Vorgängen möchten Sie möglicherweise in die Integration einer Bibliothek wie date.js oder moment.js investieren, die dem Entwickler die Arbeit erheblich erleichtert. Dies ist jedoch nur eine Frage der persönlichen Präferenz.

Zum Beispiel in moment.js würden wir tun, moment1.diff(moment2, "seconds")was schön ist.


Nützliche Dokumente für diese Antwort


14
GetTIme ist nicht erforderlich , die Daten können voneinander subtrahiert werden, da der Operator - sie zu Zahlen zwingt .
RobG

3
getTime ist notwendig, wenn Sie Typoskript verwenden, es erlaubt keine arithmetische Operation zwischen anderen Elementen als irgendwelchen, Zahlen oder Aufzählungen
zaffaste

Sie können verwenden .valueOf(), was der -Bediener auf jeden Fall nennen würde ...
Heretic Monkey

1
Wie wäre es, wenn wir auch die Zeitunterschiede zwischen Stunde und Minute brauchen ...? Sollte ich es um 60 oder ein Vielfaches davon teilen ...? @ Juan
Gumuruh

Bitte fügen Sie neue Zweifel als einzelne Fragen hinzu, aber da diese wahrscheinlich als Duplikat geschlossen werden würde, werfen Sie
Juan Cortés

5

Sie können new Date().getTime()Zeitstempel abrufen. Dann können Sie die Differenz zwischen Ende und Start berechnen und schließlich den Zeitstempel msin transformieren s.

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);

4
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>

1

Der folgende Code gibt den Zeitunterschied in Sekunden an.

var date1 = new Date(); // current date
var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second

alert(timeDiffInSecond );

0

Versuchen Sie, dedizierte Funktionen aus höheren Programmiersprachen zu verwenden. JavaScript .getSeconds();passt hier:

var specifiedTime = new Date("November 02, 2017 06:00:00");
var specifiedTimeSeconds = specifiedTime.getSeconds(); 

var currentTime = new Date();
var currentTimeSeconds = currentTime.getSeconds(); 

alert(specifiedTimeSeconds-currentTimeSeconds);

0

Zeitunterschied zwischen jetzt und 10 Minuten später mit momentjs

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.