有效地将基于字符串的时间转换为毫秒

时间:2016-08-08 12:47:54

标签: javascript

我遇到了一个挑战,要创建一个将基于字符串的时间转换为毫秒的函数。

这是我给出的字符串格式:

  

“小时:分钟:seconds.milliseconds”

所以这个值例如需要返回3010220。

  

“0:50:10.220”

功能需要简短且有一条线。 我很想知道在哪里可以改进下面的功能,因为它没有通过标准。怎么能把它变成一个班轮?

function toMilliseconds(time){
  return time.match(/[0-9]+/g).map(function(val,s,a){
    return s != 3 ? +val * ((Math.pow(60,a.length - s -2) * 1000)) : +val;
  }).reduce(function(a,b){
    return a+b;
  },0);
}

3 个答案:

答案 0 :(得分:3)

有许多不同的方式。

这是我能想到的最短路径(使用ES6):



var str = "0:50:10.220";

var ms = (s=>1E3*s[2]+6E4*s[1]+36E5*s[0])(str.split(':'));

console.log(ms);




答案 1 :(得分:3)

还有一个:

let ms = str.split(':').reduce((a,v,i) => a + v * [3600000, 60000, 1000, 1][i], 0)

编辑,感谢@Swonkie:

let ms = str.split(':').reduce((a,v,i) => a + v * [3600000, 60000, 1000][i], 0)

导致(感谢@Arnauld):

let ms = str.split(':').reduce((a,v,i)=>a+v*1E3*[3600,60,1][i],0);

或者,通过舍入(完全没有测试有效性):

let ms = str.split(':').reduce((a,v,i)=>a+v*1E3*[3600,60,1][i],0.5)|0;

答案 2 :(得分:-1)

如下所述:

  

https://codereview.stackexchange.com/questions/45335/milliseconds-to-time-string-time-string-to-milliseconds

这看起来很好解决方案:

function timeString2ms(a,b){// time(HH:MM:SS.mss) // optimized
 return a=a.split('.'), // optimized
  b=a[1]*1||0, // optimized
  a=a[0].split(':'),
  b+(a[2]?a[0]*3600+a[1]*60+a[2]*1:a[1]?a[0]*60+a[1]*1:a[0]*1)*1e3 // optimized
}

“oneline solution”

function timeString2ms2(a,b){ return a=a.split('.'),b=a[1]*1||0,a=a[0].split(':'),b+(a[2]?a[0]*3600+a[1]*60+a[2]*1:a[1]?a[0]*60+a[1]*1:a[0]*1)*1e3 }

用法

console.log(timeString2ms('10:21:32.093')); // hh:mm:ss.mss
console.log(timeString2ms('21:32.093')); // mm:ss.mss
console.log(timeString2ms('21:32')); // mm:ss
console.log(timeString2ms('32.093')); // ss.mss 
console.log(timeString2ms('32')); // ss
console.log(timeString2ms('32467.784'));  // seconds.ms
console.log(timeString2ms(32467.784+'')); // seconds.ms