Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用moment.js减去2次,然后减去几分钟_Javascript_Momentjs - Fatal编程技术网

Javascript 如何使用moment.js减去2次,然后减去几分钟

Javascript 如何使用moment.js减去2次,然后减去几分钟,javascript,momentjs,Javascript,Momentjs,我需要用moment.js减去2次(得到差值),然后用这个结果减去一些额外的分钟数(简单整数)。它是用来计算时间表的。举几个例子: 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

我需要用moment.js减去2次(得到差值),然后用这个结果减去一些额外的分钟数(简单整数)。它是用来计算时间表的。举几个例子:

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"
我知道moment.js可以做到这一点,但我正在努力获得预期的结果。我一直在尝试:

function getTimeInterval(startTime, endTime){
        return moment(moment(startTime,"hh:mm").diff(moment(endTime,"hh:mm"))).format("hh:mm"); 
}
格式似乎正确,但我得到的值不正确。例如,我的示例#2返回的结果是“6:30”而不是“10:30”,那么如何减去午餐的int分钟数?


非常感谢您的帮助。

您可以使用
diff
方法来计算两个日期之间的差值,使用
减法来减去时间。就你而言:

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");
}
请密切注意格式的大小写。您使用的是12小时制的
hh


另请参见:

某些测试用例失败。尝试以下操作:getTimeInterval(“06:15”、“22:45”、“0”)\\错误结果:4:30您是对的,我已编辑了我的答案以修复它。这个问题与小写的
hh
有关,而不是
format
中的
hh
。另外,请将分钟作为整数传递,否则它不会被扣除
// 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');