JavaScript将HH:MM转换为十进制

10
我有一个JavaScript函数,可以给我一天内工作的总小时数,格式为HH:MM。我想将这些数字转换为小数,以便于相加。但目前好像一直出现错误:
function timeToDecimal(t) {
t = t.split(':');
return = t[0]*1 + '.' parseInt(t[1])/60;
}    

我是否遗漏了一些重要的内容?我一直在遇到语法错误。


5
parseInt()之前似乎漏了一个+符号,需要添加吗? - Michelle
2
那会将它转换成字符串。我认为去掉句号会有帮助。 - Pete
1
为什么不将这两个数字都解析为整数?只解析其中一个没有意义。 - xd6_
1
为什么要加上“.”?当你将分钟数除以60时,得到的答案是十分之一。30/60 = .5 - CM Kanode
什么是语法错误? - Code-Apprentice
3个回答

24
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);
}   

FIDDLE

该函数返回最多保留两位小数的数字。

timeToDecimal('00:01') // 0.01
timeToDecimal('00:03') // 0.05
timeToDecimal('00:30') // 0.5
timeToDecimal('10:10') // 10.16
timeToDecimal('01:30') // 1.5
timeToDecimal('3:22' ) // 3.36
timeToDecimal('22:45') // 22.75
timeToDecimal('02:00') // 2

做到了,谢谢!我错过了一些语法问题 :/ - Jason B
@JasonB - 很高兴能帮忙! - adeneo
我使用这个解决方案得到了错误的值: timeToDecimal("00:01") // 结果为0.1 timeToDecimal("00:03") // 结果为0.5 - Peter Roehlen
1
@PeterRoehlen - 你说得对,它没有考虑前导零,已经修复了! - adeneo
@adeneo 这个函数不起作用,例如对于1:03,它给出0.5作为结果。我建议使用Pete的解决方案。 - netadictos
@adeneo - 你提供的jsfiddle链接并不是你的解决方案,展示你的解决方案的jsfiddle链接是这个:http://jsfiddle.net/ZC387/304/,它在1:03时给出了1.5的结果。如果你找到了更好的解决方案,请更新你的解决方案。 - netadictos

7

如上所述,有一些小的语法错误:

去掉“=”,“.”并加入parseInt。

function timeToDecimal(t) {
  t = t.split(':');
  return parseInt(t[0], 10)*1 + parseInt(t[1], 10)/60;
}  

为了完整起见,这里提供一个可实现更高精度级别的功能性解决方案:jsfiddle。请注意保留HTML标记。
function timeToDecimal(t) {
  return t.split(':')
          .map(function(val) { return parseInt(val, 10); } )
          .reduce( function(previousValue, currentValue, index, array){
              return previousValue + currentValue / Math.pow(60, index);
          });
};

console.log(timeToDecimal('2:49:50'));

0

在return后面不应该加上=,让Math为您生成小数点。

这样就可以了。

function timeToDecimal(t) {
    t = t.split(':');
    return parseFloat(parseInt(t[0], 10) + parseInt(t[1], 10)/60);
}  

console.log(timeToDecimal('04:30')); // 4.5
console.log(timeToDecimal('04:22')); // 4.366666666666666
console.log(timeToDecimal('12:05')); // 12.083333333333334

根据您想要进行的计算类型,您可能需要对结果进行舍入。

这里是Fiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接