2016-12-02 132 views
0

我有一個像下面計數持續時間

%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

回答

0

如果你的格式是<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

0

我覺得完全避免日期會更簡單。將時間轉換爲一個公分母,例如秒,在秒上做任何你想要的數學運算,然後在最後轉換回時間。

/* 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);