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?


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.


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


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

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

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

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

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.


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


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

}

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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.