JavaScript - Holen Sie sich Minuten zwischen zwei Daten


156

Wie kann ich mit JavaScript die Differenz zwischen den beiden Daten in Minuten ermitteln, wenn ich zwei Daten habe ?


Sind sie Datumsobjekte oder nur Zeichenfolgen? Bitte geben Sie ein Beispiel situatin
amosrivera

Antworten:


204

Sie können diesen Code auschecken:

var today = new Date();
var Christmas = new Date("2012-12-25");
var diffMs = (Christmas - today); // milliseconds between now & Christmas
var diffDays = Math.floor(diffMs / 86400000); // days
var diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours
var diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000); // minutes
alert(diffDays + " days, " + diffHrs + " hours, " + diffMins + " minutes until Christmas 2009 =)");

oder var diffMins = Math.floor((...um Sekunden zu verwerfen, wenn Sie keine Minuten runden möchten.


7
@philk, deshalb schätze ich StackOverflow so sehr. In vielen Message Boards ist die Antwort nur ein Hyperlink. Wir hätten diese großartige Antwort nicht, wenn dies hier der Fall wäre.
Andrew Neely

5
Beim Testen dieser Antwort ist ein Fehler aufgetreten: DiffHrs ist möglicherweise falsch, wenn Sie die Minuten im Date-Objekt festlegen. Wenn Weihnachten beispielsweise "25.12.2015 03:55" und heute "25.12.2015 02:00" ist, beträgt die Stunde zwei Stunden. Sollte eine Stunde sein.
HoffZ

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);funktioniert nicht, wenn der Unterschied größer als 60 Minuten ist
kuncevic.dev

3
Wiederholen, dass dies zumindest für Minuten NICHT richtig funktioniert. Zum Beispiel dauerte es einen Unterschied von 62 Minuten und aufgrund der Rundung dachte man, es sei ein Unterschied von 2 Minuten.
Jordanien

6
Die Frage wird nicht richtig beantwortet. Statt die Differenz in NUR Minuten zu berechnen, wird die Differenz als Zusammensetzung aus Tagen, Stunden und Minuten berechnet. Wenn die Differenz also 1 Tag 1 Stunde 1 Minute beträgt, wird 1 angezeigt Tag 1 Stunde 1 Minute statt 1501 Minuten
Akhil Gupta

169

Wenn Sie 2 Datumsobjekte subtrahieren, erhalten Sie den Unterschied in Millisekunden, z.

var diff = Math.abs(new Date('2011/10/09 12:00') - new Date('2011/10/09 00:00'));

Math.abswird verwendet, um die absolute Differenz verwenden zu können ( new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')ergibt also das gleiche Ergebnis).

Wenn Sie das Ergebnis durch 1000 teilen, erhalten Sie die Anzahl der Sekunden. Wenn Sie dies durch 60 teilen, erhalten Sie die Anzahl der Minuten. Um auf ganze Minuten zu runden, verwenden Sie Math.flooroder Math.ceil:

var minutes = Math.floor((diff/1000)/60);

In diesem Beispiel ist das Ergebnis 720


1
Yip. Oder so etwas wie, (Math.floor(seconds/60))+':'+((seconds/60)%60)wenn Sie auch die restlichen Sekunden brauchen
KooiInc

4
Ich denke, dies ist die bessere Antwort. Ich habe festgestellt, dass die akzeptierte Antwort die Differenz nicht in Minuten umwandelt, wenn die Differenz mehr als 60 Minuten beträgt
sani

Das ist auch falsch. 12:00 kann nicht dasselbe sein wie 00:00, da dies 12 Stunden Unterschied sind ...
Davatar

1
@Davatar wer sagt, dass sie gleich sind? er gibt nur an, dass 12 Stunden - 0 Stunden gleich 0 Stunden - 12 Stunden sind.
Mark Baijens

Alte Antwort, aber Sie sollten sie niemals new Date(string)mit einem anderen Format als einer ISO-8601-Formatzeichenfolge verwenden. Siehe Warum liefert Date.parse falsche Ergebnisse? oder verwenden Sie einfach Zahlen (z. B. new Date(2011, 9, 9, 12, 0, 0)denken Sie daran, dass Monate auf 0 basieren).
Heretic Monkey

52
var startTime = new Date('2012/10/09 12:00'); 
var endTime = new Date('2013/10/09 12:00');
var difference = endTime.getTime() - startTime.getTime(); // This will give difference in milliseconds
var resultInMinutes = Math.round(difference / 60000);

2
Das ist schön und einfach und hat bei mir funktioniert. Ich habe die .getTime () aus den Daten entfernt, da es mir logischer erschien, die beiden Daten zu vergleichen. Vielen Dank.
Yos

Alte Antwort, aber Sie sollten sie niemals new Date(string)mit einem anderen Format als einer ISO-8601-Formatzeichenfolge verwenden. Siehe Warum liefert Date.parse falsche Ergebnisse? oder verwenden Sie einfach Zahlen (z. B. new Date(2011, 9, 9, 12, 0, 0)denken Sie daran, dass Monate auf 0 basieren).
Heretic Monkey

46

Eine einfache Funktion, um diese Berechnung durchzuführen:

function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}

24

Das sollte den Unterschied zwischen den beiden Daten in Minuten zeigen. Probieren Sie es in Ihrem Browser aus:

const currDate = new Date('Tue Feb 13 2018 13:04:58 GMT+0200 (EET)')
const oldDate  = new Date('Tue Feb 13 2018 12:00:58 GMT+0200 (EET)')


(currDate - oldDate) / 60000 // 64

4
TypeScript gibt den Fehler "Die linke und rechte Seite einer arithmetischen Operation muss vom Typ 'any', 'number' oder vom Typ enum sein". Um den Fehler zu vermeiden, tun Sie(currDate.getTime() - oldDate.getTime()) / 60000
Homer

12

Für diejenigen, die gerne mit kleinen Zahlen arbeiten

const today = new Date();
const endDate = new Date(startDate.setDate(startDate.getDate() + 7));
const days = parseInt((endDate - today) / (1000 * 60 * 60 * 24));
const hours = parseInt(Math.abs(endDate - today) / (1000 * 60 * 60) % 24);
const minutes = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000 * 60) % 60);
const seconds = parseInt(Math.abs(endDate.getTime() - today.getTime()) / (1000) % 60); 

9

Dieses Problem lässt sich mit moment.js wie in diesem Beispiel leicht lösen:

var difference = mostDate.diff(minorDate, "minutes");

Der zweite Parameter kann für andere Parameter geändert werden (siehe Dokumentation zu moment.js).

zB: "Tage", "Stunden", "Minuten" usw.

http://momentjs.com/docs/

Das CDN für moment.js finden Sie hier:

https://cdnjs.com/libraries/moment.js

Vielen Dank.

BEARBEITEN:

mostDate und minorDate sollten ein Momenttyp sein.


2

Hier ist ein bisschen Spaß, den ich hatte, um etwas Ähnliches in Node zu lösen.

function formatTimeDiff(date1, date2) {
  return Array(3)
    .fill([3600, date1.getTime() - date2.getTime()])
    .map((v, i, a) => {
      a[i+1] = [a[i][0]/60, ((v[1] / (v[0] * 1000)) % 1) * (v[0] * 1000)];
      return `0${Math.floor(v[1] / (v[0] * 1000))}`.slice(-2);
    }).join(':');
}

const millis = 1000;
const utcEnd = new Date(1541424202 * millis);
const utcStart = new Date(1541389579 * millis);
const utcDiff = formatTimeDiff(utcEnd, utcStart);

console.log(`Dates:
  Start   : ${utcStart}
  Stop    : ${utcEnd}
  Elapsed : ${utcDiff}
  `);

/*
Outputs:

Dates:
  Start   : Mon Nov 05 2018 03:46:19 GMT+0000 (UTC)
  Stop    : Mon Nov 05 2018 13:23:22 GMT+0000 (UTC)
  Elapsed : 09:37:02
*/

Sie können es in Aktion unter https://repl.it/@GioCirque/TimeSpan-Formatting sehen


0

Der folgende Code hat bei mir funktioniert:

function timeDiffCalc(dateNow,dateFuture) {
    var newYear1 = new Date(dateNow);
    var newYear2 = new Date(dateFuture);

        var dif = (newYear2 - newYear1);
        var dif = Math.round((dif/1000)/60);
        console.log(dif);

}

0

Sie können wie folgt vorgehen:

  1. Get difference of dates(Differenz wird in Millisekunden angegeben)
  2. Konvertieren millisecondsin minutesdhms/1000/60

Der Code:

let dateOne = new Date("2020-07-10");
let dateTwo = new Date("2020-07-11");

let msDifference =  dateTwo - dateOne;
let minutes = Math.floor(msDifference/1000/60);
console.log("Minutes between two dates =",minutes);
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.