JavaScript - uzyskaj minuty między dwiema datami

156

Jeśli mam dwie daty, w jaki sposób mogę użyć JavaScript, aby uzyskać różnicę między nimi w minutach?

Jan
źródło
czy są to obiekty daty, czy tylko łańcuchy? proszę podać przykład
situatin

Odpowiedzi:

204

Możesz sprawdzić ten kod:

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 =)");

lub var diffMins = Math.floor((...odrzucić sekundy, jeśli nie chcesz zaokrąglać minut.

Darin Dimitrov
źródło
7
@philk, dlatego tak bardzo cenię StackOverflow. Na wielu forach dyskusyjnych odpowiedzią jest tylko hiperłącze. Nie mielibyśmy tej wspaniałej odpowiedzi, gdyby tak było w tym przypadku.
Andrew Neely,
5
Znalazłem błąd podczas testowania tej odpowiedzi: DiffHrs może być błędne, jeśli ustawisz minuty w obiekcie Date. Na przykład, jeśli Boże Narodzenie to „12-25-2015 03:55”, a dzisiaj to „12-25-2015 02:00”, to różnica godzin wynosi dwie godziny. Powinien zająć godzinę.
HoffZ
29
Math.round(((diffMs % 86400000) % 3600000) / 60000);nie działa, gdy różnica jest większa niż 60 minut
kuncevic.dev
3
Powtarzając, że to NIE działa poprawnie, przynajmniej przez kilka minut. Na przykład zajęło to 62 minuty i ze względu na zaokrąglenie pomyślał, że to różnica 2 minut.
Jordan,
6
nie odpowiada poprawnie na pytanie, zamiast obliczać różnicę w TYLKO minutach, różnica jest obliczana jako połączenie dni, godzin i minut ... więc jeśli różnica wynosi 1 dzień 1 godzina 1 minuta, pokaże 1 dzień 1 godzina 1 minuta zamiast 1501 minut
Akhil Gupta
170

Odejmowanie 2 obiektów Date daje różnicę w milisekundach, np .:

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

Math.absjest używany, aby móc użyć różnicy bezwzględnej (więc new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')daje ten sam wynik).

Dzieląc wynik przez 1000, otrzymujesz liczbę sekund. Dzieląc to przez 60, otrzymujesz liczbę minut. Aby zaokrąglić do całych minut, użyj Math.floorlub Math.ceil:

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

W tym przykładzie wynikiem będzie 720

KooiInc
źródło
1
Yip. Lub coś w stylu, (Math.floor(seconds/60))+':'+((seconds/60)%60)jeśli potrzebujesz też pozostałych sekund
KooiInc
4
Myślę, że to lepsza odpowiedź, zauważyłem, że zaakceptowana odpowiedź nie zamienia różnicy na minutę, gdy różnica jest większa niż 60 minut
sani
To też jest złe. 12:00 nie może być tym samym, co 00:00, ponieważ to różnica 12 godzin ...
Davatar
1
@Davatar, który mówi, że są takie same? po prostu stwierdza, że ​​12 godzin - 0 godzin to to samo, co 0 godzin - 12 godzin.
Mark Baijens,
Stara odpowiedź, ale nigdy nie należy używać new Date(string)z formatem innym niż ciąg formatu ISO-8601. Zobacz Dlaczego Date.parse daje nieprawidłowe wyniki? lub po prostu użyj liczb (np. new Date(2011, 9, 9, 12, 0, 0)pamiętaj tylko, że miesiące są oparte na 0).
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);
MrGorki
źródło
2
To jest ładne i proste i zadziałało dla mnie. Usunąłem .getTime () z dat, ponieważ wydawało mi się to bardziej logiczne, ponieważ chodziło o porównanie dwóch dat. Dzięki.
Yos
Stara odpowiedź, ale nigdy nie należy używać new Date(string)z formatem innym niż ciąg formatu ISO-8601. Zobacz Dlaczego Date.parse daje nieprawidłowe wyniki? lub po prostu użyj liczb (np. new Date(2011, 9, 9, 12, 0, 0)pamiętaj tylko, że miesiące są oparte na 0).
Heretic Monkey
46

Prosta funkcja do wykonania tego obliczenia:

function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}
Aliteracja Alicja
źródło
24

To powinno pokazać różnicę między dwiema datami w minutach. Wypróbuj w swojej przeglądarce:

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
Purkhalo Alex
źródło
4
TypeScript wyświetli błąd „Lewa i prawa strona operacji arytmetycznej musi być typu„ any ”,„ number ”lub enum type”. Aby uniknąć błędu, zrób(currDate.getTime() - oldDate.getTime()) / 60000
Homer
12

Dla tych, którzy lubią pracować z małymi liczbami

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); 
Stóg
źródło
9

Ten problem można łatwo rozwiązać za pomocą pliku moment.js, na przykład:

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

Drugi parametr można zmienić na inne parametry, patrz dokumentacja moment.js.

np. „dni”, „godziny”, „minuty” itp.

http://momentjs.com/docs/

CDN for moment.js jest dostępny tutaj:

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

Dzięki.

EDYTOWAĆ:

MostDate i minorDate powinny być typu momentu.

Marco Blos
źródło
2

Oto trochę zabawy podczas rozwiązywania czegoś podobnego w węźle.

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
*/

Możesz zobaczyć to w akcji pod adresem https://repl.it/@GioCirque/TimeSpan-Formatting

Gio Palacino
źródło
0

Poniższy kod zadziałał dla mnie,

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);

}
Anusha Bhat
źródło
0

Możesz wykonać następujące czynności:

  1. Get difference of dates(różnica będzie w milisekundach)
  2. Konwertuj millisecondsna minutesnpms/1000/60

Kod:

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);
Tanzeem Bhatti
źródło