JavaScript: obtenga minutos entre dos fechas

156

Si tengo dos fechas, ¿cómo puedo usar JavaScript para obtener la diferencia entre las dos fechas en minutos?

Juan
fuente
¿son objetos de fecha o simplemente cadenas? por favor, dar un ejemplo situatin
amosrivera

Respuestas:

204

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

o var diffMins = Math.floor((...descartar segundos si no desea redondear los minutos.

Darin Dimitrov
fuente
77
@philk, por eso valoro tanto StackOverflow. En muchos tableros de mensajes, la respuesta es solo un hipervínculo. No tendríamos esta gran respuesta si ese fuera el caso aquí.
Andrew Neely
55
Encontré un error al probar esta respuesta: DiffHrs puede estar equivocado si configura los minutos en el objeto Fecha. Por ejemplo, si la Navidad es "25-12-2015 03:55" y hoy es "25/12/2015 02:00", entonces la diferencia horaria es de dos horas. Debería ser una hora.
HoffZ
29
Math.round(((diffMs % 86400000) % 3600000) / 60000);no funciona cuando la diferencia es mayor a 60 minutos
kuncevic.dev
3
Reiterando que esto NO funciona correctamente, al menos durante minutos. Por ejemplo, tomó una diferencia de 62 minutos y debido al redondeo, pensó que era una diferencia de 2 minutos.
Jordania
66
no responde la pregunta correctamente, en lugar de calcular la diferencia en SOLO minutos, la diferencia se calcula como una combinación de días, horas y minutos ... por lo tanto, si la diferencia es 1 día 1 hora 1 minuto, mostrará 1 día 1 hora 1 minuto, en lugar de 1501 minutos
Akhil Gupta
170

Restar 2 objetos Date le da la diferencia en milisegundos, por ejemplo:

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

Math.absse usa para poder usar la diferencia absoluta (por lo que new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')da el mismo resultado).

Dividir el resultado entre 1000 te da la cantidad de segundos. Dividir eso entre 60 te da la cantidad de minutos. Para redondear a minutos enteros, use Math.flooro Math.ceil:

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

En este ejemplo, el resultado será 720

KooiInc
fuente
1
Yip O algo así como (Math.floor(seconds/60))+':'+((seconds/60)%60)si necesita los segundos restantes también
KooiInc
44
Creo que esta es la mejor respuesta, noté que la respuesta aceptada no puede convertir la diferencia en minutos cuando la diferencia es más de 60 minutos
sani
Esto también está mal. 12:00 no puede ser lo mismo que 00:00, ya que estas son 12 horas de diferencia ...
Davatar
1
@Davatar, ¿quién dice que son iguales? él solo dice que 12 horas - 0 horas es lo mismo que 0 horas - 12 horas.
Mark Baijens
Respuesta anterior, pero nunca debe usarse new Date(string)con un formato que no sea una cadena de formato ISO-8601. Consulte ¿Por qué Date.parse da resultados incorrectos? , o simplemente use números (por ejemplo, new Date(2011, 9, 9, 12, 0, 0)solo recuerde que los meses están basados ​​en 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
fuente
2
Esto es agradable y simple y funcionó para mí. Sin embargo, eliminé el .getTime () de las fechas, ya que me pareció más lógico, ya que la idea es comparar las dos fechas. Gracias.
Yos
Respuesta anterior, pero nunca debe usarse new Date(string)con un formato que no sea una cadena de formato ISO-8601. Consulte ¿Por qué Date.parse da resultados incorrectos? , o simplemente use números (por ejemplo, new Date(2011, 9, 9, 12, 0, 0)solo recuerde que los meses están basados ​​en 0).
Heretic Monkey
46

Una función simple para realizar este cálculo:

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

Eso debería mostrar la diferencia entre las dos fechas en minutos. Pruébalo en tu 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
fuente
44
TypeScript le dará el error "El lado izquierdo y derecho de una operación aritmética debe ser del tipo 'any', 'number' o un tipo de enumeración". Para evitar el error, hazlo(currDate.getTime() - oldDate.getTime()) / 60000
Homero
12

Para aquellos que les gusta trabajar con números pequeños.

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); 
Almiar
fuente
9

Este problema se resuelve fácilmente con moment.js, como este ejemplo:

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

El segundo parámetro se puede cambiar por otros parámetros, consulte la documentación de moment.js.

por ejemplo: "días", "horas", "minutos", etc.

http://momentjs.com/docs/

El CDN para moment.js está disponible aquí:

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

Gracias.

EDITAR:

mostDate y minorDate deberían ser un tipo de momento.

Marco Blos
fuente
2

Aquí hay algo de diversión que tuve resolviendo algo similar en el 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
*/

Puede verlo en acción en https://repl.it/@GioCirque/TimeSpan-Formatting

Gio Palacino
fuente
0

El siguiente código funcionó para mí,

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

Puedes hacer lo siguiente:

  1. Obtener difference of dates(la diferencia será en milisegundos)
  2. Convierte millisecondsen minutesiems/1000/60

El 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
fuente