使用javascript转换由半冒号分隔的字符串

时间:2017-02-03 03:04:28

标签: javascript regex

我有一个像01:02:3这样的字符串(这是一个时间),我希望以秒为单位获得总数值。所以预期产量将是3723。

const time = "1:02:3";

const timeNumeric = time.split(':').map(item => { 
  return Number(item)
});

function total() {
  var totalTime = 0;
  if (timeNumeric.length = 3) {
    const num1 = timeNumeric[0] * 3600
    const num2 = timeNumeric[1] * 60
    const num3 = timeNumeric[2]
    totalTime = num1 + num2 + timeNumeric[2]
  } else if (timeNumeric.length == 2) {
    const num2 = timeNumeric[1] * 60
    const num3 = timeNumeric[2]
    totalTime = num2 + num3
  } else if (timeNumeric.length == 1) {
    const num3 = timeNumeric[2]
    totalTime = num3
  } else {
    console.log('nothing')
  }
  console.log(totalTime)
}

请注意,字符串中的值可能不总是3个数字,可以是2:4530,然后第3个选项值不需要任何计算。

2 个答案:

答案 0 :(得分:1)

您需要先将拆分字符串转换为数字,然后才能使用reduce函数将它们相乘。像这样:

const strNums = "01:02:3";
const multiplier = 3;

const arrayStrNums = strNums.split(':').map( item => {
    return Number(item) * multiplier;
});

const total = arrayStrNums.reduce((a, b) => {
    return a + b;
})

console.log(total);

答案 1 :(得分:1)

您的代码是正确的,除了当前的号码。当您使用* JavaScript尝试转换为数字时。但是,当您使用+时,如果两个变量之一是String,则JavaScript会尝试转换为String。

var getSeconds = function(time) {
    return time.split(':').reduce(function(prev, curr) { 
        return prev * 60 + parseInt(curr, 10)
    }, 0)
}

var total = getSeconds('01:02:03')
var total2 = getSeconds('2:34')

console.log(total, total2) // 3723 154