计数持续时间

计数持续时间

问题描述:

我有一个像下面计数持续时间

%snd: <00:00:00><00:02:20> 
%snd: <00:02:45><00:05:18> 
%snd: <00:05:49><00:09:84> 

我想指望这两个标记之间的时间间隔在每一行,并显示所有的时间差的总和的字符串在几分钟内。我是否必须将它们转换成适当的JavaScript时间对象,还是有其他直接的方法可以做到这一点?

任何帮助或暗示将高度appreciated.Thank您

+1

你是否应该?这是你的电话。你可能相对容易地做数学运算,或者你可以让Date对象为你处理它。 –

+0

您可以分别找到第二个,第三个分钟和第二个小时(?)差异,然后将它们与* 60等相加。 – qxz

+1

是 - 转换为Date对象并获取差异。这比手动完成要容易得多。 – Archer

如果你的格式是<minutes:seconds:milliseconds>然后把这个字符串内<>标记该功能,它会给你时间,你分钟。然后可以将你的更多的逻辑。

function timeToMinutes(time) { 
    time = time.split(/:/); 
    return time[0] + (time[1]/60) + time[2]/(60*100); 
} 
+0

这段代码无法正常工作,它应该返回'time [0] * 3600 + time [1] * 60 + + time [2]'来返回秒数。 – RobG

我觉得完全避免日期会更简单。将时间转换为一个公分母,例如秒,在秒上做任何你想要的数学运算,然后在最后转换回时间。

/* Convert a string in h:mm:ss format to seconds 
 
** @param {string} s - string in hh:mm:ss format 
 
** @returns {number} - time converted to seconds 
 
*/ 
 
function parseTime(s) { 
 
    var b = s.split(/\D/); 
 
    return b[0]*3600 + b[1]*60 + +b[2]; 
 
} 
 

 
/* Convert a time in seconds to hh:mm:ss format 
 
** @param {number} secs - seconds to convert 
 
** @returns {string} - time in hh:mm:ss format 
 
*/ 
 
function secondsToTime(secs) { 
 
    function z(n){return (n<10?'0':'')+n} 
 
    var sign = secs < 0? '-' : ''; 
 
    secs = Math.abs(secs); 
 
    return sign + z(secs/3600 | 0) + ':' + 
 
     z(secs % 3600/60 | 0) + ':' + 
 
     z(secs % 60); 
 
} 
 

 
// Get time difference between 00:02:45 and 00:05:18 
 
var diffInSeconds = parseTime('00:05:18') - parseTime('00:02:45'); 
 
console.log(secondsToTime(diffInSeconds)) 
 

 
// Deal with -ve difference between 00:05:18 and 00:02:45 
 
var diffInSeconds = parseTime('00:02:45') - parseTime('00:05:18'); 
 
console.log(secondsToTime(diffInSeconds)) 
 

 
// Process a time pair (noting that 84 is likely an invalid value but is allowed) 
 
var diff = '<00:05:49><00:09:84>'.match(/\d\d:\d\d:\d\d/g).reduce((a,b)=>secondsToTime(parseTime(b) - parseTime(a))); 
 
console.log(diff);