JavaScript - Obtenha minutos entre duas datas

156

Se eu tiver duas datas, como posso usar o JavaScript para obter a diferença entre as duas datas em minutos?

John
fonte
eles são objetos de data ou apenas strings? por favor, dê um exemplo
situatin

Respostas:

204

Você pode fazer o checkout deste código:

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

ou var diffMins = Math.floor((...descartar segundos se você não quiser arredondar os minutos.

Darin Dimitrov
fonte
7
@ philk, é por isso que eu valorizo ​​tanto o StackOverflow. Em muitos quadros de mensagens, a resposta é apenas um hiperlink. Não teríamos essa ótima resposta se fosse esse o caso aqui.
Andrew Neely
5
Encontrei um erro ao testar esta resposta: DiffHrs pode estar errado Se você definir os minutos no objeto Data. Por exemplo, se o Natal é "25-25-2015 03:55" e hoje é "25-25-2015 02:00", o hourDiff é de duas horas. Deve demorar uma hora.
HoffZ
29
Math.round(((diffMs % 86400000) % 3600000) / 60000);não está a funcionar quando a diferença é maior do que 60 minutos
kuncevic.dev
3
Reiterando que isso NÃO funciona corretamente, pelo menos por minutos. Por exemplo, demorou 62 minutos e, devido ao arredondamento, considerou a diferença de 2 minutos.
Jordan
6
não responde a pergunta corretamente, em vez de calcular a diferença em APENAS minutos, a diferença é calculada como um composto de dias, horas e minutos ... assim, se a diferença for 1 dia 1 hora 1 minuto, mostrará 1 dia 1 hora 1 minuto, em vez de 1501 minutos
Akhil Gupta
170

Subtrair 2 objetos Data fornece a diferença em milissegundos, por exemplo:

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

Math.absé usado para poder usar a diferença absoluta (portanto, new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')fornece o mesmo resultado).

Dividir o resultado por 1000 fornece o número de segundos. Dividir isso por 60 fornece o número de minutos. Para arredondar para minutos inteiros, use Math.floorou Math.ceil:

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

Neste exemplo, o resultado será 720

KooiInc
fonte
1
Yip. Ou algo como (Math.floor(seconds/60))+':'+((seconds/60)%60)se você precisar os segundos restantes demasiado
KooiInc
4
Eu acho que esta é a melhor resposta, notei a resposta aceita não consegue converter a diferença a minuto quando a diferença for superior a 60 minutos
Sani
Isso também está errado. 12:00 não pode ser o mesmo que 00:00, como estes são 12 horas de diferença ...
Davatar
1
@Davatar, que diz que eles são iguais? ele apenas afirma que 12 horas - 0 horas é o mesmo que 0 horas - 12 horas.
Mark Baijens
Resposta antiga, mas você nunca deve usar new Date(string)um formato diferente de uma sequência de formato ISO-8601. Consulte Por que o Date.parse fornece resultados incorretos? ou use apenas números (por exemplo, new Date(2011, 9, 9, 12, 0, 0)lembre-se de que os meses são 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
fonte
2
Isso é legal, simples e funcionou para mim. Eu removi o .getTime () das datas, porém, como me parecia mais lógico, a idéia é comparar as duas datas. Obrigado.
Yos
Resposta antiga, mas você nunca deve usar new Date(string)um formato diferente de uma sequência de formato ISO-8601. Consulte Por que o Date.parse fornece resultados incorretos? ou use apenas números (por exemplo, new Date(2011, 9, 9, 12, 0, 0)lembre-se de que os meses são 0).
Heretic Monkey
46

Uma função simples para executar este cálculo:

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

Isso deve mostrar a diferença entre as duas datas em minutos. Experimente no seu navegador:

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
fonte
4
O TypeScript exibirá o erro "O lado esquerdo e direito de uma operação aritmética deve ser do tipo 'qualquer', 'número' ou um tipo de enumeração". Para evitar o erro fazer(currDate.getTime() - oldDate.getTime()) / 60000
Homer
12

Para quem gosta de trabalhar com números pequenos

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); 
Rick
fonte
9

Este problema é resolvido facilmente com o moment.js, como neste exemplo:

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

O segundo parâmetro pode ser alterado para outros parâmetros, consulte a documentação do moment.js.

por exemplo: "dias", "horas", "minutos" etc.

http://momentjs.com/docs/

A CDN para moment.js está disponível aqui:

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

Obrigado.

EDITAR:

mostDate e minorDate devem ser do tipo momento.

Marco Blos
fonte
2

Aqui está um pouco divertido que eu resolvi algo semelhante no nó.

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

Você pode vê-lo em ação em https://repl.it/@GioCirque/TimeSpan-Formatting

Gio Palacino
fonte
0

O código a seguir funcionou para mim,

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
fonte
0

Você pode fazer o seguinte:

  1. Get difference of dates(a diferença será em milissegundos)
  2. Converter millisecondsem minutesiems/1000/60

O código:

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
fonte