429 Stimmen

JavaScript Sekunden in Zeitstring mit Format hh:mm:ss

Ich möchte eine Zeitspanne umwandeln, d.h., die Anzahl der Sekunden in einen durch Doppelpunkt getrennten Zeitstring (hh:mm:ss)

Ich habe hier einige nützliche Antworten gefunden, aber sie sprechen alle von der Umwandlung in das Format von x Stunden und x Minuten.

Gibt es also einen kleinen Ausschnitt, der dies in jQuery oder reinem JavaScript macht?

15 Stimmen

Benchmarks einiger der vorgeschlagenen Antworten in diesem Thread. jsperf.com/ms-to-hh-mm-ss-time-format

0 Stimmen

2voto

John Slegers Punkte 41127

Sie können die folgende Funktion verwenden, um die Zeit (in Sekunden) in das Format HH:MM:SS umzuwandeln :

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

Ohne die Angabe eines Trennzeichens wird : als (Standard-)Trennzeichen verwendet :

time = convertTime(13551.9941351); // --> AUSGABE = 03:45:51

Wenn Sie - als Trennzeichen verwenden möchten, geben Sie es einfach als zweiten Parameter an:

time = convertTime(1126.5135155, '-'); // --> AUSGABE = 00-18-46

Demo

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

document.body.innerHTML = '' + JSON.stringify({
    5.3515555 : convertTime(5.3515555),
    126.2344452 : convertTime(126.2344452, '-'),
    1156.1535548 : convertTime(1156.1535548, '.'),
    9178.1351559 : convertTime(9178.1351559, ':'),
    13555.3515135 : convertTime(13555.3515135, ',')
}, null, '\t') +  '';

Siehe auch dieses Fiddle.

2voto

Big Sam Punkte 1031

Hier ist eine ziemlich einfache Lösung, die auf die nächste Sekunde rundet!

var returnElapsedTime = function(epoch) {
  //Wir nehmen an, dass das Epoch in Sekunden ist
  var hours = epoch / 3600,
      minutes = (hours % 1) * 60,
      seconds = (minutes % 1) * 60;
  return Math.floor(hours) + ":" + Math.floor(minutes) + ":" + Math.round(seconds);
}

2voto

Matt Kenefick Punkte 1101

Dies ist einer, den ich kürzlich für MM:SS geschrieben habe. Es entspricht nicht genau der Frage, aber es ist ein anderer Einzeiler-Format.

const time = 60 * 2 + 35; // 2 Minuten, 35 Sekunden
const str = (~~(time / 60) + "").padStart(2, '0') + ":" + (~~((time / 60) % 1 * 60) + "").padStart(2, '0');

str // 02:35

Bearbeitet: Dies wurde zur Vielfalt hinzugefügt, aber die beste Lösung hier ist https://stackoverflow.com/a/25279399/639679 unten.

2voto

rookie1024 Punkte 551

So habe ich das gemacht. Es scheint ziemlich gut zu funktionieren und ist extrem kompakt. (Es verwendet jedoch viele ternäre Operatoren)

function formatTime(seconds) {
  var hh = Math.floor(seconds / 3600),
    mm = Math.floor(seconds / 60) % 60,
    ss = Math.floor(seconds) % 60;
  return (hh ? (hh < 10 ? "0" : "") + hh + ":" : "") + ((mm < 10) && hh ? "0" : "") + mm + ":" + (ss < 10 ? "0" : "") + ss
}

...und zur Formatierung von Strings...

String.prototype.toHHMMSS = function() {
  formatTime(parseInt(this, 10))
};

1voto

dt192 Punkte 848

So habe ich es gemacht

function timeFromSecs(seconds)
{
    return(
    Math.floor(seconds/86400)+'d :'+
    Math.floor(((seconds/86400)%1)*24)+'h : '+
    Math.floor(((seconds/3600)%1)*60)+'m : '+
    Math.round(((seconds/60)%1)*60)+'s');
}

timeFromSecs(22341938) gibt '258d 14h 5m 38s' zurück

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X