2017-10-14 28 views
0

如何將全日制時間轉換爲小數?在下面的代碼中秒不會被轉換。Full hour hh:ii:ss to decimal

function timeToDecimal(t) { 
    var arr = t.split(':'); 
    var dec = parseInt((arr[1]/6)*10, 10); 

    return parseFloat(parseInt(arr[0], 10) + '.' + (dec < 10 ? '0' : '') + dec); 
} 

console.log(timeToDecimal('00:01:44')); // 0.01 
console.log(timeToDecimal('00:03:36')); // 0.05 
console.log(timeToDecimal('00:30:47')); // 0.5 
console.log(timeToDecimal('10:10:20')); // 10.16 
console.log(timeToDecimal('01:30:58')); // 1.5 
console.log(timeToDecimal('3:22:10')); // 3.36 
console.log(timeToDecimal('22:45:48')); // 22.75 
console.log(timeToDecimal('02:00:05')); // 2 
+0

的jsfiddle http://jsfiddle.net/ZC387/55/ – Guttemberg

回答

1

先做數學那麼結果處理字符串

function timeToDecimal(t) { 
 
    var arr = t.split(':').map(Number);  
 
    return (arr[0] + arr[1]/60 + arr[2]/3600).toFixed(2); 
 
} 
 

 
console.log(timeToDecimal('00:01:44')); 
 
console.log(timeToDecimal('00:03:36')); 
 
console.log(timeToDecimal('00:30:47')); 
 
console.log(timeToDecimal('10:10:20')); 
 
console.log(timeToDecimal('01:30:58')); 
 
console.log(timeToDecimal('3:22:10')); 
 
console.log(timeToDecimal('22:45:48')); 
 
console.log(timeToDecimal('02:00:05'));

2

你的代碼永遠不會是指arr[2],所以很明顯它是不會做的事情秒。

您構建一個看起來像十進制數的字符串,然後用parseFloat解析它的方法很奇怪,至少可以說。所有你需要的是

function timeToDecimal(t) { 
    const [hh, mm, ss] = t.split(':'); 

    return +hh + mm/60 + ss/3600; 
} 

但你應該真的使用這個庫。隨着一刻,這將是

moment.duration('1:30:22').asHours() 
+0

路使用'Array#reduce'簡化我的回答 – lumio