全小时hh:ii:ss到十进制

时间:2017-10-14 15:41:18

标签: javascript

如何将全职时间转换为十进制?在下面的代码中,没有转换秒数。

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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:1)

首先进行数学计算,然后将结果处理为字符串

&#13;
&#13;
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') ); 
&#13;
&#13;
&#13;