2017-10-14 14 views
0

フルタイムを10進数に変換するにはどうすればよいですか?下のコードで秒は変換されていません。フルタイムhh:ii:小数点以下への小文字

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]を参照していないので、明らかに秒で何もしません。

10進数のように見える文字列を作成し、それを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

関連する問題