计数持续时间
问题描述:
我有一个像下面计数持续时间
%snd: <00:00:00><00:02:20>
%snd: <00:02:45><00:05:18>
%snd: <00:05:49><00:09:84>
我想指望这两个标记之间的时间间隔在每一行,并显示所有的时间差的总和的字符串在几分钟内。我是否必须将它们转换成适当的JavaScript时间对象,还是有其他直接的方法可以做到这一点?
任何帮助或暗示将高度appreciated.Thank您
答
如果你的格式是<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);
你是否应该?这是你的电话。你可能相对容易地做数学运算,或者你可以让Date对象为你处理它。 –
您可以分别找到第二个,第三个分钟和第二个小时(?)差异,然后将它们与* 60等相加。 – qxz
是 - 转换为Date对象并获取差异。这比手动完成要容易得多。 – Archer