查找最小持续时间

时间:2019-02-23 03:49:15

标签: javascript time momentjs duration

我有一个如下的持续时间字符串数组,并希望找到最短时间。

group = ["41:04", "54:50", "01:03:50"] // note this is mix of **mm:ss** and **HH:mm:ss**

我正在使用时刻:

group.map(tid => moment.duration(tid,'hh:mm:ss').asSeconds()); 

,但它将前两个元素解释为“ hh:mm ”,而不是“ mm:ss ”,结果为:

[147840, 197400, 3830]

但是,第一个元素“ 41:04”是最短的持续时间。

有什么办法可以利用瞬间做到这一点?还是找到最短持续时间的最佳方法是什么?

请注意,如果我自己将零连接到字符串(即 00 :41:04),那将是正确的。

1 个答案:

答案 0 :(得分:1)

您可以使用简单的数学方法来计算经过的秒数,而无需使用任何库。 例如;

41:04 = 41 * 60 + 04
01:03:50 = 01 * (60 ^ 2) + 03 * 60 + 50

创建简单的函数来计算seconds elapsed

const getSeconds = str => {
  const sp = str.split(":");
  let sum = 0;
  sp.map((d, k) => {
    sum += Number(d) * 60 ** (sp.length - 1 - k);
  });
  return sum;
};

现在,您可以遍历数组以获取秒数。

const min = group.reduce((d, k) => {
  const a = getSeconds(d),
      b = getSeconds(k);
  return  a < b ? d : k; 
});

作为一个整体,您可以查看下面的代码片段;

const group = ["50:04","41:04", "54:50", "01:03:50"];
const getSeconds = str => {
  const sp = str.split(":");
  let sum = 0;
  sp.map((d, k) => {
    sum += Number(d) * 60 ** (sp.length - 1 - k);
  });
  return sum;
};

const min = group.reduce((d, k) => {
  const a = getSeconds(d),
      b = getSeconds(k);
  return  a < b ? d : k; 
});

console.log(min);

可能会有更优雅的解决方案。但这就是我想出的。 :D