web-dev-qa-db-fra.com

Différence entre deux dates en minutes, heures javascript

Je veux trouver la différence entre deux dates. J'ai essayé ce code mais il me donne de mauvaises valeurs. Je veux avoir un total de minutes entre deux dates, donc je convertis des heures en minutes et en ajoute des minutes.

var hourDiff = timeEnd - timeStart;
var diffHrs = Math.round((hourDiff % 86400000) / 3600000);
var diffMins = Math.round(((hourDiff % 86400000) % 3600000) / 60000);
diffMins = diffMins + (diffHrs * 60);

Ici timeEnd est Mon Jan 01 2007 11:30:00 GMT+0530 (India Standard Time),

et timeStart est Mon Jan 01 2007 11:00:00 GMT+0530 (India Standard Time).

Ici, si la différence d'heures, j'obtiens 1, ce devrait être 0 et les minutes que j'obtiens 30 sont exactes. Mais les heures devraient être 0. Est-ce que je fais quelque chose de mal ici?

7
sharad

Essayer:

var diffHrs = Math.floor((hourDiff % 86400000) / 3600000);

Math.round a arrondi la différence 0.5 heure à 1. Vous voulez seulement obtenir les heures "complètes" dans votre variable d'heures, supprimez-vous toutes les minutes de la variable avec la fonction Math.floor()

3
Cerbrus

Essayez ce code (utilise ms comme unités initiales)

var timeStart = new Date("Mon Jan 01 2007 11:00:00 GMT+0530").getTime();
var timeEnd = new Date("Mon Jan 01 2007 11:30:00 GMT+0530").getTime();
var hourDiff = timeEnd - timeStart; //in ms
var secDiff = hourDiff / 1000; //in s
var minDiff = hourDiff / 60 / 1000; //in minutes
var hDiff = hourDiff / 3600 / 1000; //in hours
var humanReadable = {};
humanReadable.hours = Math.floor(hDiff);
humanReadable.minutes = minDiff - 60 * humanReadable.hours;
console.log(humanReadable); //{hours: 0, minutes: 30}

JSFiddle: http://jsfiddle.net/n2WgW/

20
strah

Essaye ça:

var startDate = new Date('Jan 01 2007 11:00:00');
var endDate = new Date('Jan 01 2007 11:30:00');
var starthour = parseInt(startDate.getHours());
var endhour = parseInt(endDate.getHours());

if(starthour>endhour){
    alert('Hours diff:' + parseInt(starthour-endhour));
}
else{
    alert('Hours diff:' + parseInt(endhour-starthour));
}

Et voici le travail violon .

4
nrsharma

Vous pouvez essayer ceci: -

function diff_hours(dt2, dt1) 
 {

  var diff =(dt2.getTime() - dt1.getTime()) / 1000;
  diff /= (60 * 60);         // For Hours
  //diff /= (60);          For Minutes
  return Math.abs(Math.round(diff));

 }

dt1 = new Date(2014,10,2);
dt2 = new Date(2014,10,3);
console.log(diff_hours(dt1, dt2));            // you will get '24' hours


dt1 = new Date("October 13, 2014 08:11:00");
dt2 = new Date("October 13, 2014 11:13:00");
console.log(diff_hours(dt1, dt2));           // you will get '3' hours
1
Vishal Thakur
var timeDiff = function (date1, date2) {
        var a = new Date(date1).getTime(),
            b = new Date(date2).getTime(),
            diff = {};

        diff.milliseconds = a > b ? a % b : b % a;
        diff.seconds = diff.milliseconds / 1000;
        diff.minutes = diff.seconds / 60;
        diff.hours = diff.minutes / 60;
        diff.days = diff.hours / 24;
        diff.weeks = diff.days / 7;

        return diff;
    }
0
Ade

Vous pouvez obtenir le décalage horaire en heures minutes et secondes comme compte à rebours en utilisant les méthodes suivantes:

var diff = EndedTime - StartedTime;
var hours   = Math.floor(diff / 3.6e6);
var minutes = Math.floor((diff % 3.6e6) / 6e4);
var seconds = Math.floor((diff % 6e4) / 1000);
var duration = hours+":"+minutes+":"+seconds;

J'espère que cette aide. Merci

0
Vishal Patel

Si vous êtes sûr que la différence sera inférieure à 24 heures, voici ce qui fonctionne.

var timeStart= new Date('2015-01-01 03:45:45.890');
var timeEnd = new Date('2015-01-01 05:12:34.567');
var timeDiff = new Date(timeEnd.getTime() - timeStart.getTime());
var humanTime = timeDiff.toISOString().substring(11, 23);
var diffHours = timeDiff.toISOString().substring(11, 12);

humanTime est 01: 26: 48.677, diffHours est 01

0
John Nowlin