javascript 将“4d 5小时8分钟”等持续时间转换为秒

njthzxwz  于 2022-12-21  发布在  Java
关注(0)|答案(2)|浏览(112)

我不知道我该怎么做这种事。
例如,您输入4d 5hours 8mins,然后在return中,将得到364080
输入可以有许多可能的组合,如“4天”或“4days”而不是“4d”等。
我还没有尝试过任何东西。我是新的JS和搜索的答案,但还没有找到任何工作给我。

vmdwslir

vmdwslir1#

要将字符串输入(如“4d 5h 8m”)转换为总分钟数,可以使用以下步骤:
使用split()函数将输入字符串拆分为单个单词的数组。例如:

const input = "4d 5h 8m";
const words = input.split(" "); // ["4d", "5h", "8m"]

迭代单词数组并分析每个单词的值和单位。可以使用正则表达式从每个单词中提取值和单位。例如:

let totalMinutes = 0;

for (const word of words) {
     const value = parseInt(word.match(/\d+/));
     const unit = word.match(/[a-zA-Z]+/);
  if (unit === "d") {
    totalMinutes += value * 1440; // 1440 minutes in a day
  } else if (unit === "h") {
     totalMinutes += value * 60; // 60 minutes in an hour
   } else if (unit === "m") {
   totalMinutes += value;
 }
}
dldeef67

dldeef672#

您可以通过三个步骤完成此操作:

  • .replace()-删除金额和单位之间的空格
  • .split()-按空格拆分
  • .reduce()--将数量和单位减少到秒

工作代码及示例:

[
  '4days 5hours 8mins',
  '4days 5hours 8mins 20secs',
  '14 days 15 hours 18 mins',
  '4D 5 Hours 8M'
].forEach(str => {
  let time = str
    .replace(/(\d) *([a-z])[a-z]*/gi, '$1$2')  // remove space between amount and unit
    .split(/ +/)  // split on space
    .reduce((sum, val) => { // reduce amount and unit to seconds
      let m = val.match(/^([^a-z]+)(.*)/i);
      if(m) {
        let amount = Number(m[1]);
        let unit = m[2]?.toLowerCase();
        if(unit === 'd') {
          sum += amount * 60 * 60 * 24;
        } else if(unit === 'h') {
          sum += amount * 60 * 60;
        } else if(unit === 'm') {
          sum += amount * 60;
        } else if(unit === 's') {
          sum += amount;
        }
      }
      return sum;
    }, 0);
  console.log(str, ' ==> ' , time, ' seconds');
});

输出:

4days 5hours 8mins  ==>  364080  seconds
4days 5hours 8mins 20secs  ==>  364100  seconds
14 days 15 hours 18 mins  ==>  1264680  seconds
4D 5 Hours 8M  ==>  364080  seconds

相关问题