Я бы посоветовал подумать об этом немного по-другому ... учитывая ваши три раза, конвертируйте все время в чистые часы, а затем делайте математику, как в часах. Если вам нужно, вы можете перевести дробные часы обратно в минуты.
Любое время можно превратить в часы, просто разделив количество минут на 60 и добавив результат к части часов. Тогда ваша математика становится очень легкой, это то же выражение, что и у вас, за исключением того, что вам не нужно делать математику, основанную на времени.
Если вам дано что-то в форме "чч: мм", где чч и мм - целые числа, то вы можете вычислить чистых часов , используя следующее выражение:
var mytime = "hh:mm";
var temp = mytime.split(":");
var hours = temp[0] + (temp[1]/60);
редактирование:
Другие отмечали проблемы, возникающие, если вы имеете дело с ночной сменой. Простое решение (не требующее создания объектов Date) заключается в добавлении 24 часов к времени начала, когда время окончания меньше времени начала (и это, конечно, можно сделать в домене «чистых часов»).