如何使用jQuery / Javascript获取两个时间值?

我有两个值用于完成任务所需的时间。 如何将这些值加在一起以得出总小时数和分钟数,但仍然有60分钟的值等于一小时?

我想得到的两个值和总和是HH:MM(00:00)格式。

谢谢!

这是我放置的东西。 它允许无限数量的参数,因此您可以使用addTime('01:00')addTime('01:00', '02:00', '03:00', '04:00')等它有三个函数,因为它还validation输入的时间是否格式正确,如果没有,则格式化它们。 (例如,确保分钟长度为2位,如果小时数为1位数,则将其填充为零,等等)

你可以在这里玩它: http : //jsfiddle.net/WyxwU/

它也在这里:

 var totalTime = addTime('12:34', '56:12', '78:45'); document.write(totalTime); function addTime() { if (arguments.length < 2) { if (arguments.length == 1 && isFormattedDate(arguments[0])) return arguments[0]; else return false; } var time1Split, time2Split, totalHours, totalMinutes; if (isFormattedDate(arguments[0])) var totalTime = arguments[0]; else return false; for (var i = 1; i < arguments.length; i++) { // Add them up time1Split = totalTime.split(':'); time2Split = arguments[i].split(':'); totalHours = parseInt(time1Split[0]) + parseInt(time2Split[0]); totalMinutes = parseInt(time1Split[1]) + parseInt(time2Split[1]); // If total minutes is more than 59, then convert to hours and minutes if (totalMinutes > 59) { totalHours += Math.floor(totalMinutes / 60); totalMinutes = totalMinutes % 60; } totalTime = totalHours + ':' + padWithZeros(totalMinutes); } return totalTime; } function isFormattedDate(date) { var splitDate = date.split(':'); if (splitDate.length == 2 && (parseInt(splitDate[0]) + '').length <= 2 && (parseInt(splitDate[1]) + '').length <= 2) return true; else return false; } function padWithZeros(number) { var lengthOfNumber = (parseInt(number) + '').length; if (lengthOfNumber == 2) return number; else if (lengthOfNumber == 1) return '0' + number; else if (lengthOfNumber == 0) return '00'; else return false; } 

编写自己的时间和日期函数会变得复杂。 为什么重新发明轮子。 看看优秀的http://www.datejs.com/日期库。 它处理所有与日期和时间相关的任务,使用非常简单。

这是简单的JS代码,

 var a = "2:50"; var b = "2:15"; var splitTimeStr = function(t){ var t = t.split(":"); t[0] = Number(t[0]); t[1] = Number(t[1]); return t; }; var addTime = function(t1, t2){ var t1Hr = splitTimeStr(t1)[0]; var t1Min = splitTimeStr(t1)[1]; var t2Hr = splitTimeStr(t2)[0]; var t2Min = splitTimeStr(t2)[1]; var rHr = t1Hr + t2Hr; var rMin = t1Min + t2Min; if (rMin >= 60) { rMin = rMin - 60; rHr = rHr + 1; } if (rMin < 10) rMin = "0" + rMin; if (rHr < 10) rHr = "0" + rHr; return "" + rHr + ":" + rMin; }; document.write(addTime(a, b)); 

您可以在此处使用代码validation/播放此代码: http : //jsfiddle.net/z24v7/

你需要做的是按照我的意思将它们计算为小数。 剥去60分钟到几分钟的小时/分钟

//删除小时数l_hour = Number(l_time $ .substr(0,l_pos)); //去除分钟l_min = Number(l_time $ .substr(l_pos + 1,l_time $ .length)); //添加两个值除以60分钟l_time_decimal = Number(Math.abs(l_hour))+ Number(Math.abs(l_min)/ 60);

对每个值执行此操作然后扣除两个数字以给出差异(即所花费的时间)。 剩下的就是将它从小数转换回时间l_difference_in_min = l_difference * 60; l_time_mins = l_difference_in_min%60; l_time_hours =(l_difference_in_min – l_mins)/ 60;

现在只需将两者格式化为HH:MM即可

我会将问题分解为可重用的子任务。 你必须关注这里:

  1. 以“hh:mm”格式处理时间字符串:将其转换为分钟是有意义的,因为它似乎是您运行的时间粒度。
  2. 将给定的分钟数格式化为“hh:mm”格式的时间字符串。

你将两次加在一起的事实是从上面的实际两个问题转移。

  1. 将时间字符串解析为分钟:

     function parseMinutes(s) { var tokens = s.split(":"); return tokens[0] * 60 + parseInt(tokens[1]); } 
  2. 将分钟格式化为时间字符串:

     function formatMinutes(minutes) { function pad(n) { return n > 9 ? n : ("0" + n); } var hours = Math.floor(minutes / 60), mins = minutes % 60; return pad(hours) + ":" + pad(mins); } 

那么您的具体问题可以通过以下方式解决:

 var sum = formatMinutes(parseMinutes(a) + parseMinutes(b));