JavaScript: ottieni minuti tra due date


156

Se ho due date, come posso usare JavaScript per ottenere la differenza tra le due date in minuti?


sono oggetti data o solo stringhe? per favore, fai un esempio
situatin

Risposte:


204

Puoi controllare questo codice:

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

o var diffMins = Math.floor((...scartare i secondi se non si desidera arrotondare i minuti.


7
@philk, ecco perché apprezzo così tanto StackOverflow. In molte bacheche, la risposta è solo un collegamento ipertestuale. Non avremmo questa grande risposta se fosse il caso qui.
Andrew Neely,

5
Ho trovato un errore durante il test di questa risposta: DiffHrs potrebbe essere errato Se si impostano i minuti nell'oggetto Date. Ad esempio, se Natale è "12-25-2015 03:55" e oggi è "12-25-2015 02:00", allora HourDiff è di due ore. Dovrebbe essere un'ora.
HoffZ,

29
Math.round(((diffMs % 86400000) % 3600000) / 60000);non funziona quando la differenza è maggiore di 60 minuti
kuncevic.dev

3
Ribadendo che questo NON funziona correttamente, almeno per minuti. Ad esempio, ci sono voluti una differenza di 62 minuti e, a causa dell'arrotondamento, ho pensato che fosse una differenza di 2 minuti.
Giordania,

6
non risponde correttamente alla domanda, invece di calcolare la differenza in SOLO minuti, la differenza viene calcolata come un composto di giorni, ore e minuti ... quindi se la differenza è 1 giorno 1 ora 1 minuto, mostrerà 1 giorno 1 ora 1 minuto, anziché 1501 minuti
Akhil Gupta,

170

Sottraendo 2 oggetti Data si ottiene la differenza in millisecondi, ad esempio:

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

Math.absè usato per essere in grado di usare la differenza assoluta (quindi new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')dà lo stesso risultato).

Dividere il risultato per 1000 ti dà il numero di secondi. Dividendolo per 60 ti dà il numero di minuti. Per arrotondare a minuti interi, utilizzare Math.flooro Math.ceil:

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

In questo esempio il risultato sarà 720


1
Yip. O qualcosa del genere (Math.floor(seconds/60))+':'+((seconds/60)%60)se hai bisogno anche dei restanti secondi
KooiInc,

4
Penso che questa sia la risposta migliore, ho notato che la risposta accettata non riesce a convertire la differenza in minuto quando la differenza è superiore a 60 minuti
sani,

Anche questo è sbagliato. Le 12:00 non possono essere le stesse delle 00:00, poiché queste sono 12 ore di differenza ...
Davatar,

1
@Davatar chi dice che sono gli stessi? afferma solo che 12 ore - 0 ore equivalgono a 0 ore - 12 ore.
Mark Baijens,

Vecchia risposta, ma non si dovrebbe mai usare new Date(string)con un formato diverso da una stringa di formato ISO-8601. Vedi Perché Date.parse dà risultati errati? , o semplicemente usa i numeri (es., new Date(2011, 9, 9, 12, 0, 0)ricorda solo che i mesi sono basati su 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
Questo è carino e semplice e ha funzionato per me. Ho rimosso .getTime () dalle date anche se mi è sembrato più logico visto che l'idea è quella di confrontare le due date. Grazie.

Vecchia risposta, ma non si dovrebbe mai usare new Date(string)con un formato diverso da una stringa di formato ISO-8601. Vedi Perché Date.parse dà risultati errati? , o semplicemente usa i numeri (es., new Date(2011, 9, 9, 12, 0, 0)ricorda solo che i mesi sono basati su 0).
Heretic Monkey

46

Una semplice funzione per eseguire questo calcolo:

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

24

Questo dovrebbe mostrare la differenza tra le due date in minuti. Provalo nel tuo browser:

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 fornisce l'errore "Il lato sinistro e destro di un'operazione aritmetica deve essere di tipo 'any', 'number' o enum type". Per evitare l'errore, fai(currDate.getTime() - oldDate.getTime()) / 60000
Homer,

12

Per quelli a cui piace lavorare con piccoli numeri

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

Questo problema viene risolto facilmente con moment.js, come in questo esempio:

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

Il secondo parametro può essere modificato per altri parametri, consultare la documentazione di moment.js.

ad esempio: "giorni", "ore", "minuti", ecc.

http://momentjs.com/docs/

Il CDN per moment.js è disponibile qui:

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

Grazie.

MODIFICARE:

mostDate e minorDate dovrebbero essere un tipo di momento.


2

Ecco un po 'di divertimento che ho risolto qualcosa di simile nel nodo.

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

Puoi vederlo in azione su https://repl.it/@GioCirque/TimeSpan-Formatting


0

Il seguente codice ha funzionato per me,

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

Puoi fare come segue:

  1. Ottieni difference of dates(la differenza sarà in millisecondi)
  2. Converti millisecondsin minutesiems/1000/60

Il codice:

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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.