用简单的javascript / jquery计算hh:mm:ss的时差

我有两个输入字段用于时间开始和时间结束,还有另一个字段用于差异,即呼叫持续时间。 我希望字段上的结果格式为= 00:21:03

由于“AM / PM”格式化,我很难获得结果。 我发现了类似这样的问题,但他正在使用“momentjs”。 尽可能地,我不想使用任何插件,只需一个简单的javascript或来自jquery就可以。 这是我工作的代码,我得到的结果(0:21:3)但我需要它是两位数的小时,分​​钟和秒(00:21:03)。

 $("#form_qa_endcall").on('keyup',function(){ var callStart = $('#form_qa_startcall').val(); var callEnd = $('#form_qa_endcall').val(); var timeStart = new Date("01/01/2007 " + callStart); var timeEnd = new Date("01/01/2007 " + callEnd); function datediff(fromDate,toDate,interval) { var second=1000, minute=second*60, hour=minute*60, day=hour*24, week=day*7; fromDate = new Date(fromDate); toDate = new Date(toDate); var timediff = toDate - fromDate; if (isNaN(timediff)) return NaN; switch (interval) { case "years": return toDate.getFullYear() - fromDate.getFullYear(); case "months": return ( ( toDate.getFullYear() * 12 + toDate.getMonth() ) - ( fromDate.getFullYear() * 12 + fromDate.getMonth() ) ); case "weeks" : return Math.floor(timediff / week); case "days" : return Math.floor(timediff / day); case "hours" : return Math.floor(timediff / hour); case "minutes": return Math.floor(timediff / minute); case "seconds": return Math.floor(timediff / second); default: return undefined; } } var seco = datediff(timeStart, timeEnd, 'seconds') % 60; var minu = datediff(timeStart, timeEnd, 'minutes') % 60; var hour = datediff(timeStart, timeEnd, 'hours'); $('#form_qa_callduration').val(hour + ":" + minu + ":" + seco); }); 

你可以使用这段代码:

 function diff(a, b) { function toTime(a) { return Date.parse('1970-01-01 ' + a.substr(0,8)) / 1000 + (a.includes('PM') && (12*60*60)); } var d = toTime(b) - toTime(a); return d >= 0 ? new Date(0,0,0,0,0,d).toTimeString().substr(0,8) : ''; } $('.qaw_form_input3').on('input', function () { $('#form_qa_callduration').val( diff($('#form_qa_startcall').val(), $('#form_qa_endcall').val())); }).click(); 
  

假设你把它作为字符串,你可以大致做到以下几点。

 var str1 = "11:31:51 AM"; var str2 = "11:52:54 AM"; str1 = str1.split(':'); str2 = str2.split(':'); if(str1[2].split(' ').pop() != str2[2].split(' ').pop()) { // one is AM other is PM str1[0] = parseInt(str1[0])+12; } var finalStr = m(str1[0], str2[0])+":"+m(str1[1], str2[1])+":"+m(str1[2], str2[2]); console.log(finalStr); function m(n1,n2) { return Math.abs(parseInt(n1)-parseInt(n2)); }