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?


¿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.


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


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

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

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

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

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.


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


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

}

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.