web-dev-qa-db-fra.com

Comment soustraire 2 fois avec moment.js, puis soustraire quelques minutes

Je dois soustraire 2 fois avec moment.js (obtenir la différence), puis avec ce résultat, soustraire quelques minutes supplémentaires (simple int). C'est pour le calcul des feuilles de temps. Quelques exemples:

Example #1:
Start time: 10:00 AM (represented in js as "10:00")
End time: 2:00 PM (represented in js as "14:00")
Lunch: 30 minutes ("30")
Expected result: "3:30" (10am - 2pm is 4 hours, minus 30 minutes for lunch = 3hrs 30 mins -- and I need it output as "3:30")

Example #2:
Start time: 6:15 AM (represented in js as "6:15")
End time: 4:45 PM (represented in js as "16:45")
Lunch: 0 minutes ("0")
Expected result: "10:30"

Je sais que moment.js peut le faire, mais j'ai du mal à obtenir les résultats escomptés. J'ai essayé ceci:

function getTimeInterval(startTime, endTime){
        return moment(moment(startTime,"hh:mm").diff(moment(endTime,"hh:mm"))).format("hh:mm"); 
}

La mise en forme semble correcte, mais je reçois des valeurs incorrectes. Par exemple, le résultat renvoyé pour mon exemple n ° 2 est "6:30" au lieu de "10:30" Et ensuite, comment puis-je soustraire les minutes int pour le déjeuner?

Toute aide est très appréciée.

6
HerrimanCoder
// parse time using 24-hour clock and use UTC to prevent DST issues
var start = moment.utc(startTime, "HH:mm");
var end = moment.utc(endTime, "HH:mm");

// account for crossing over to midnight the next day
if (end.isBefore(start)) end.add(1, 'day');

// calculate the duration
var d = moment.duration(end.diff(start));

// subtract the lunch break
d.subtract(30, 'minutes');

// format a string result
var s = moment.utc(+d).format('H:mm');

Portez une attention particulière à la casse des formats. Vous utilisiez hh qui correspond à une horloge de 12 heures.

Voir aussi: Obtenir le décalage horaire entre deux dates-heures

28
Matt Johnson

Vous pouvez utiliser la méthode diff pour calculer la différence entre deux dates et la méthode subtract pour soustraire du temps. Dans ton cas:

function getTimeInterval(startTime, endTime, lunchTime){
    var start = moment(startTime, "HH:mm");
    var end = moment(endTime, "HH:mm");
    var minutes = end.diff(start, 'minutes');
    var interval = moment().hour(0).minute(minutes);
    interval.subtract(lunchTime, 'minutes');
    return interval.format("HH:mm");
}
0
VincenzoC