2017-10-14 57 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