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?


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.


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


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

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

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

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

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.


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


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

}

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);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.