JavaScript - Obtenez des minutes entre deux dates

156

Si j'ai deux dates, comment puis-je utiliser JavaScript pour obtenir la différence entre les deux dates en quelques minutes?

John
la source
sont-ils des objets de date ou juste des chaînes? Veuillez donner un exemple de situation
amosrivera

Réponses:

204

Vous pouvez vérifier ce code:

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((...pour supprimer les secondes si vous ne voulez pas arrondir les minutes.

Darin Dimitrov
la source
7
@philk, c'est pourquoi j'apprécie tellement StackOverflow. Dans de nombreux babillards électroniques, la réponse n'est qu'un lien hypertexte. Nous n'aurions pas cette excellente réponse si c'était le cas ici.
Andrew Neely
5
J'ai trouvé une erreur lors du test de cette réponse: DiffHrs peut être erroné Si vous définissez les minutes dans l'objet Date. Par exemple, si Noël est "12-25-2015 03:55" et aujourd'hui est "12-25-2015 02:00", alors hourDiff est de deux heures. Ça devrait durer une heure.
HoffZ
29
Math.round(((diffMs % 86400000) % 3600000) / 60000);ne fonctionne pas lorsque la différence est supérieure à 60 minutes
kuncevic.dev
3
Réitérant que cela ne fonctionne PAS correctement, au moins pendant quelques minutes. Par exemple, cela a pris une différence de 62 minutes et en raison de l'arrondissement, j'ai pensé que c'était une différence de 2 minutes.
Jordan
6
il ne répond pas correctement à la question, au lieu de calculer la différence en SEULEMENT minutes, la différence est calculée comme un composite de jours, heures et minutes ... donc si la différence est de 1 jour 1 heure 1 minute, il affichera 1 jour 1 heure 1 minute, au lieu de 1501 minutes
Akhil Gupta
170

La soustraction de 2 objets Date vous donne la différence en millisecondes, par exemple:

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

Math.absest utilisé pour pouvoir utiliser la différence absolue ( new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00')donne donc le même résultat).

Diviser le résultat par 1000 vous donne le nombre de secondes. En divisant cela par 60, vous obtenez le nombre de minutes. Pour arrondir à des minutes entières, utilisez Math.floorou Math.ceil:

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

Dans cet exemple, le résultat sera 720

KooiInc
la source
1
Yip. Ou quelque chose comme (Math.floor(seconds/60))+':'+((seconds/60)%60)si vous avez également besoin des secondes restantes
KooiInc
4
Je pense que c'est la meilleure réponse, j'ai remarqué que la réponse acceptée ne convertissait pas la différence en minute lorsque la différence est supérieure à 60 minutes
sani
Ceci est également faux. 12:00 ne peut pas être la même chose que 00:00, car il s'agit de 12 heures de décalage ...
Davatar
1
@Davatar qui dit qu'ils sont pareils? il déclare simplement que 12 heures - 0 heure équivaut à 0 heure - 12 heures.
Mark Baijens
Ancienne réponse, mais vous ne devez jamais utiliser new Date(string)avec un format autre qu'une chaîne de format ISO-8601. Voir Pourquoi Date.parse donne-t-il des résultats incorrects? , ou utilisez simplement des nombres (par exemple, new Date(2011, 9, 9, 12, 0, 0)rappelez-vous simplement que les mois sont basés sur 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
la source
2
C'est agréable et simple et cela a fonctionné pour moi. J'ai supprimé le .getTime () des dates, car cela me semblait plus logique vu que l'idée est de comparer les deux dates. Merci.
Yos
Ancienne réponse, mais vous ne devez jamais utiliser new Date(string)avec un format autre qu'une chaîne de format ISO-8601. Voir Pourquoi Date.parse donne-t-il des résultats incorrects? , ou utilisez simplement des nombres (par exemple, new Date(2011, 9, 9, 12, 0, 0)rappelez-vous simplement que les mois sont basés sur 0).
Heretic Monkey
46

Une fonction simple pour effectuer ce calcul:

function getMinutesBetweenDates(startDate, endDate) {
    var diff = endDate.getTime() - startDate.getTime();
    return (diff / 60000);
}
AllitératifAlice
la source
24

Cela devrait montrer la différence entre les deux dates en quelques minutes. Essayez-le dans votre navigateur:

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
la source
4
TypeScript vous donnera l'erreur "Les côtés gauche et droit d'une opération arithmétique doivent être de type 'any', 'number' ou un type enum". Pour éviter l'erreur, faites(currDate.getTime() - oldDate.getTime()) / 60000
Homer
12

Pour ceux qui aiment travailler avec de petits nombres

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); 
Meule
la source
9

Ce problème se résout facilement avec moment.js, comme cet exemple:

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

Le deuxième paramètre peut être changé pour un autre paramètre, voir la documentation moment.js.

par exemple: "jours", "heures", "minutes", etc.

http://momentjs.com/docs/

Le CDN pour moment.js est disponible ici:

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

Merci.

ÉDITER:

mostDate et minorDate doivent être de type moment.

Marco Blos
la source
2

Voici un peu de plaisir que j'ai eu à résoudre quelque chose de similaire dans node.

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

Vous pouvez le voir en action sur https://repl.it/@GioCirque/TimeSpan-Formatting

Gio Palacino
la source
0

Le code suivant a fonctionné pour moi,

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
la source
0

Vous pouvez faire comme suit:

  1. Get difference of dates(La différence sera en millisecondes)
  2. Convertir millisecondsen minutesiems/1000/60

Le code:

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
la source