246 votes

JavaScript - Obtenir les minutes entre deux dates

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

0 votes

S'agit-il d'objets datés ou de simples chaînes de caractères ? donnez un exemple de situation.

297voto

Darin Dimitrov Points 528142

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

10 votes

@philk, c'est pourquoi j'apprécie tant StackOverflow. Dans de nombreux forums de discussion, la réponse n'est qu'un hyperlien. Nous n'aurions pas cette excellente réponse si c'était le cas ici.

5 votes

J'ai trouvé une erreur en testant cette réponse : DiffHrs peut être erroné Si vous définissez les minutes dans l'objet Date. Par exemple, si Noël est le "25-12-2015 03:55" et qu'aujourd'hui est le "25-12-2015 02:00", la différence d'heures est de deux heures. Il devrait être d'une heure.

0 votes

Pourquoi % 86400000) % 3600000) nécessaire ?

270voto

KooiInc Points 38845

En soustrayant 2 objets Date, on obtient 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.abs est utilisé pour pouvoir utiliser la différence absolue (donc new Date('2011/10/09 00:00') - new Date('2011/10/09 12:00') donne le même résultat).

En divisant le résultat par 1000, on obtient le nombre de secondes. En divisant le résultat par 60, vous obtenez le nombre de minutes. Pour arrondir aux minutes entières, utilisez Math.floor ou Math.ceil :

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

Dans cet exemple, le résultat sera 720

89voto

MrGorki Points 398
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 votes

C'est simple et efficace et ça a marché pour moi. J'ai cependant supprimé le .getTime() des dates, car cela me semblait plus logique étant donné que l'idée est de comparer les deux dates. Merci.

1 votes

Vieille réponse, mais vous ne devriez 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 chiffres (par exemple, new Date(2011, 9, 9, 12, 0, 0) (n'oubliez pas que les mois sont basés sur 0).

66voto

AlliterativeAlice Points 3344

Une fonction simple pour effectuer ce calcul :

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

29voto

Alex P Points 344

Cela devrait montrer la différence entre les deux dates en 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

9 votes

TypeScript vous donnera l'erreur "The left -hand and right hand side of an arithmetic operation must be of type 'any', 'number' or an enum type". Pour éviter cette erreur, faites (currDate.getTime() - oldDate.getTime()) / 60000

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X