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.