且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何计算24小时制两次时钟之间的时差

更新时间:2022-12-09 12:21:10

提供的解决方案无法有效地解决日期边界问题.所有这些都假设差异少于24小时.这意味着我们在23小时59分钟的开始和结束之间的差异上有一个上限,否则我们会对结果感到困惑.但是请记住,正如描述的那样,一个真实的用例是,一个事件开始于晚上11点,结束于凌晨1点(从23:00到1:00),并且相差2小时而不是22小时.

The solutions provided aren't accounting for the day boundary effectively. And all of this assumes the difference is less than 24 hours. Meaning that we have an upper boundary on the difference between start and end of 23 hours and 59 minutes, otherwise we are confused by the result. But remember that as described a real use case is that an event starts at 11pm and ends at 1am (from 23:00 to 1:00) and the difference is 2 hours NOT 22 hours.

function calculateTime(e) {
   var startTime = $('#start').val();
   var endTime = $('#end').val();

   var startTimeArray = startTime.split(":");
   var startInputHrs = parseInt(startTimeArray[0]);
   var startInputMins = parseInt(startTimeArray[1]);

   var endTimeArray = endTime.split(":");
   var endInputHrs = parseInt(endTimeArray[0]);
   var endInputMins = parseInt(endTimeArray[1]);

   var startMin = startInputHrs*60 + startInputMins;
   var endMin = endInputHrs*60 + endInputMins;

   var result;

   if (endMin < startMin) {
       var minutesPerDay = 24*60; 
       result = minutesPerDay - startMin;  // Minutes till midnight
       result += endMin; // Minutes in the next day
   } else {
      result = endMin - startMin;
   }

   var minutesElapsed = result % 60;
   var hoursElapsed = (result - minutesElapsed) / 60;

   alert ( "Elapsed Time : " + hoursElapsed + ":" + (minutesElapsed < 10 ?
            '0'+minutesElapsed : minutesElapsed) ) ;
}

我没有检查,但我相信您可以做到这一点,但我没有检查它:

And I didn't check, but I believe you could just do this, but I'm not checking it :

var result = endMin - startMin;
if (result < 0 ) result = (24*60) + result;