仅在javascript中将HH:MM:SS字符串转换为秒

Sri*_*ddy 74 javascript time

我有类似的要求:将HH:MM:SS格式的时间转换为仅秒?

但在javascript中.我已经看到很多将秒转换成不同格式的例子,但不是HH:MM:SS转换为秒.任何帮助,将不胜感激.

Dag*_*bit 161

试试这个:

var hms = '02:04:33';   // your input string
var a = hms.split(':'); // split it at the colons

// minutes are worth 60 seconds. Hours are worth 60 minutes.
var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]); 

console.log(seconds);
Run Code Online (Sandbox Code Playgroud)

  • 这是这个的原型版本!`String.prototype.toSeconds = function(){if(!this)返回null; var hms = this.split(':'); return(+ hms [0])*60*60 +(+ hms [1])*60 +(+ hms [2] || 0); 注意:`|| 0`在末端有利于这个代码的任何实现 - 它防止问题与HH的(仍然有效)时间表示:MM(铬类型="时间"的输入将这种格式的输出时秒= 0). (2认同)
  • 使用"+"运算符将数字字符串转换为数字不是一个好主意.它很短,看起来"聪明",但它令人困惑,而不是干净的代码.请改用parseInt(x,10).并避免单行.还可以通过未定义的输入防止错误.例如:它不是字符串,没有":"或只有"HH:MM".等等 (2认同)

Nik*_*iko 56

这个功能有"HH:MM:SS"以及"MM:SS"或"SS".

function hmsToSecondsOnly(str) {
    var p = str.split(':'),
        s = 0, m = 1;

    while (p.length > 0) {
        s += m * parseInt(p.pop(), 10);
        m *= 60;
    }

    return s;
}
Run Code Online (Sandbox Code Playgroud)


Pau*_*aul 27

这可以通过以下方式非常灵活地完成:

'01:02:03'.split(':').reduce((acc,time) => (60 * acc) + +time);
Run Code Online (Sandbox Code Playgroud)

这是因为小时,分钟和秒内的每个时间单位是比较小单位大60的倍数.时间被分成小时分和秒组件,然后通过使用较高单位的累计值乘以60来减少到秒,因为它通过每个单元.

+time用于将时间转换为数值.

它基本上最终会做: (60 * ((60 * HHHH) + MM)) + SS

  • 是的,这很聪明,但它是创建难以维护的代码而没有实际收益的好例子。缩小与缩小版本的接受答案相比,它可以节省 4 个字符。鉴于现在许多网页都超过了 1MB,因此节省的空间并不大。 (4认同)
  • 虽然这个答案不易理解,但它可以优雅地处理"HH:MM:SS"以及"MM:SS",而接受的答案则不然. (3认同)
  • 如果仅给出秒部分,则此问题存在类型转换错误。您需要用 0 显式初始化备忘录来防止它。有效: `'03'.split(':').reduce((acc,time) => (60 * acc) + +time, 0);` 失败,因为返回意外的字符串: `'03'.split( ':').reduce((acc,time) => (60 * acc) + +time);` (3认同)

Mel*_*hia 14

这是最清晰、易于理解的解决方案:

function convertDurationtoSeconds(duration){
    const [hours, minutes, seconds] = duration.split(':');
    return Number(hours) * 60 * 60 + Number(minutes) * 60 + Number(seconds);
};

const input = '01:30:45';
const output = convertDurationtoSeconds(input);
console.log(`${input} is ${output} in seconds`);
Run Code Online (Sandbox Code Playgroud)


小智 11

hh:mm:ss在一行中将字符串转换为秒.也让h:m:s格式mm:ss,m:s等等

'08:45:20'.split(':').reverse().reduce((prev, curr, i) => prev + curr*Math.pow(60, i), 0)
Run Code Online (Sandbox Code Playgroud)

  • 请解释一下你的答案 (4认同)

bos*_*kop 10

由于Date对象的getTime函数获得自1970/01/01以来的毫秒数,因此我们可以这样做:

var time = '12:23:00';
var seconds = new Date('1970-01-01T' + time + 'Z').getTime() / 1000;
Run Code Online (Sandbox Code Playgroud)

  • @Yablargo 谢谢。以前的版本在本地时区不能很好地工作,因此我对其进行了编辑以使用 iso 8601 utc 日期时间格式。 (2认同)

Luc*_*uca 8

尝试

time="12:12:12";
tt=time.split(":");
sec=tt[0]*3600+tt[1]*60+tt[2]*1;
Run Code Online (Sandbox Code Playgroud)

  • 啊,那个*1是一个聪明的方法,让它不做字符串连接:) (5认同)

Chr*_*zoa 5

Javascript的静态方法Date.UTC()可以解决问题:

alert(getSeconds('00:22:17'));

function getSeconds(time)
{
    var ts = time.split(':');
    return Date.UTC(1970, 0, 1, ts[0], ts[1], ts[2]) / 1000;
}
Run Code Online (Sandbox Code Playgroud)


Jan*_*cak 5

在原始批准的答案上,这可能是更具可读性的表格。

const getSeconds = (hms: string) : number => {
  const [hours, minutes, seconds] = hms.split(':');
  return (+hours) * 60 * 60 + (+minutes) * 60 + (+seconds);
};
Run Code Online (Sandbox Code Playgroud)

  • 您应该提到这是*TYPESCRIPT*,并且如果您将其复制并粘贴为VANILLA JAVASCRIPT,则__WON'T WORK__。 (3认同)