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

时间:2012-03-09 20:06:44

标签: javascript time

我有类似的要求:Convert time in HH:MM:SS format to seconds only?

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

14 个答案:

答案 0 :(得分:145)

试试这个:

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);

答案 1 :(得分:54)

此功能有“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;
}

答案 2 :(得分:27)

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

'01:02:03'.split(':').reduce((acc,time) => (60 * acc) + +time);

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

+time用于将时间转换为数字。

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

如果只传递了秒,则结果将是一个字符串,因此为了解决这个问题,我们可以将整个结果转换为int:

+('03'.split(':').reduce((acc,time) => (60 * acc) + +time));

答案 3 :(得分:9)

hh:mm:ss字符串转换为一行中的秒数。还允许h:m:s格式和mm:ssm:s

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

答案 4 :(得分:8)

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

答案 5 :(得分:7)

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

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

答案 6 :(得分:4)

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;
}

答案 7 :(得分:2)

new Date(moment('23:04:33', "HH:mm")).getTime()

输出: 1499755980000(以毫秒为单位)             (1499755980000/1000)(第二名)

注意:此输出计算从1970-01-01 12:0:0到现在的差异        我们需要实现moment.js

答案 8 :(得分:2)

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

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

答案 9 :(得分:1)

此功能也适用于MM:SS:



const convertTime = (hms) => {
        if (hms.length <3){
         return hms
        } else if (hms.length <6){
          const a = hms.split(':')
          return hms = (+a[0]) * 60 + (+a[1])
        } else {
          const a = hms.split(':')
          return hms = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2])
        }
      }
&#13;
&#13;
&#13;

答案 10 :(得分:1)

来自Paul https://stackoverflow.com/a/45292588/1191101给出的解决方案,但使用了旧的函数表示法,因此它也可以在其他js引擎(例如Java Rhino)中使用

function strToSeconds (stime)
{
   return +(stime.split(':').reduce(function (acc,time) { return +(60 * acc) + +time }));
}

或仅此一种更具可读性

function strToSeconds (stime)
{
  var tt = stime.split(':').reverse ();
  return ((tt.length >= 3) ? (+tt[2]): 0)*60*60 + 
         ((tt.length >= 2) ? (+tt[1]): 0)*60 + 
         ((tt.length >= 1) ? (+tt[0]): 0);
}

答案 11 :(得分:0)

&#13;
&#13;
function parsehhmmsst(arg) {
	var result = 0, arr = arg.split(':')
	if (arr[0] < 12) {
		result = arr[0] * 3600 // hours
	}
	result += arr[1] * 60 // minutes
	result += parseInt(arr[2]) // seconds
	if (arg.indexOf('P') > -1) {  // 8:00 PM > 8:00 AM
		result += 43200
	}
	return result
}
$('body').append(parsehhmmsst('12:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('1:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('2:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('3:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('4:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('5:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('6:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('7:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('8:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('9:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('10:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('11:00:00 AM') + '<br>')
$('body').append(parsehhmmsst('12:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('1:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('2:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('3:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('4:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('5:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('6:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('7:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('8:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('9:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('10:00:00 PM') + '<br>')
$('body').append(parsehhmmsst('11:00:00 PM') + '<br>')
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 12 :(得分:0)

你可以动态地做到这一点 - 如果你不仅遇到:HH:mm:ss,而且还有mm:ss,甚至只有ss。

var str = '12:99:07';
var times = str.split(":");
times.reverse();
var x = times.length, y = 0, z;
for (var i = 0; i < x; i++) {
    z = times[i] * Math.pow(60, i);
    y += z;
}
console.log(y);

答案 13 :(得分:0)

这是最清晰易懂的解决方案:

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`);