【问题标题】:Insert SubString in a time input type在时间输入类型中插入 SubString
【发布时间】:2021-03-07 05:56:38
【问题描述】:

我有一个时间计算器,它以以下格式返回时间输入类型:hh/mm/ss

目前显示如下:

Let time = "03:00:00"

当我执行计算函数时,它会返回“3:0:0”并删除“0”。

如何将其更改为 03:00:00?只有当 h/m/s 小于 10 时才必须添加“0”。

如果需要,这是我的计算功能。该函数返回一个数组的时间总和:

let testOne = ["02:00:00", "01:00:00", "01:00:00"]

function test () {
let calTotalHours = testOne.map(t => t.split(':')).reduce((arr,item,index)=>{

    arr[0]+= parseFloat(item[0]);
    arr[1]+= parseFloat(item[1]);
    arr[2]+= parseFloat(item[2]);

    if(arr[2]>=60) {
        arr[1]++;
        arr[2]%=60;
    }
    if(arr[1]>=60) {
        arr[0]++;
        arr[1]%=60;
    }
    return arr;
},[0,0,0])
    .join(':')
    console.log(calTotalHours)
}

【问题讨论】:

  • 您已经回答了您的问题:“如果 h/m/s 小于 10。” 使用 if 语句检查值是否小于 10 (或长度
  • 是的,我试过了,但无法解决。当我添加 0 时,它不允许我在最后返回 arr。

标签: javascript arrays input time format


【解决方案1】:

你需要在reduce之后添加零,因为reduce仍在计算时间。

我在计算后添加了一个.map,以获取每个时间值,然后检查值是否小于10:

.map((v) => (v < 10) ? v = "0" + v : v)

let testOne = ["02:00:00", "01:00:00", "01:00:00"]

function test() {
  let calTotalHours = testOne.map(t => t.split(':')).reduce((arr, item, index) => {

    arr[0] += parseFloat(item[0]);
    arr[1] += parseFloat(item[1]);
    arr[2] += parseFloat(item[2]);

    if (arr[2] >= 60) {
      arr[1]++;
      arr[2] %= 60;
    }
    if (arr[1] >= 60) {
      arr[0]++;
      arr[1] %= 60;
    }

    return arr;
  }, [0, 0, 0]).map((v) => (v < 10) ? v = "0" + v : v).join(':')
  console.log(calTotalHours)
}

test()

【讨论】:

  • 谢谢你!地图正是我想要的!谢谢:-)
【解决方案2】:

您可以使用padStart() 函数执行类似的操作来获得您想要的内容

let testOne = ["02:00:00", "01:00:00", "01:00:00"]

function test() {
  let calTotalHours = testOne.map(t => t.split(':')).reduce((arr, item, index) => {

      arr[0] += parseFloat(item[0]);
      arr[1] += parseFloat(item[1]);
      arr[2] += parseFloat(item[2]);

      if (arr[2] >= 60) {
        arr[1]++;
        arr[2] %= 60;
      }
      if (arr[1] >= 60) {
        arr[0]++;
        arr[1] %= 60;
      }


      return arr;
    }, [0, 0, 0])
    .map((num) => num.toString().padStart(2, 0)) //add 0 to each value here if they are less than 10
    .join(':');
  console.log(calTotalHours);

}
test();

【讨论】:

  • padStart 的用法在这里很好,让我 +1
  • pasStart 也能胜任!谢谢你的例子。我已经将 Calvins 的答案标记为已解决,但这也有效。
【解决方案3】:

您可以在加入阵列之前尝试使用 .padStart() on:

.map(num => num.toString().padStart(2, '0'))

这将填充长度小于2的前导0

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2020-05-20
    相关资源
    最近更新 更多