如何将全职时间转换为十进制?在下面的代码中,没有转换秒数。
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 :(得分: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)
首先进行数学计算,然后将结果处理为字符串
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;