427 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

45voto

Ash Burlaczenko Punkte 23186

Eine Google-Suche ergab dieses Ergebnis:

function secondsToTime(secs)
{
    secs = Math.round(secs);
    var hours = Math.floor(secs / (60 * 60));

    var divisor_for_minutes = secs % (60 * 60);
    var minutes = Math.floor(divisor_for_minutes / 60);

    var divisor_for_seconds = divisor_for_minutes % 60;
    var seconds = Math.ceil(divisor_for_seconds);

    var obj = {
        "h": hours,
        "m": minutes,
        "s": seconds
    };
    return obj;
}

8 Stimmen

secondsToTime(119.9) => Objekt {h: 0, m: 1, s: 60}. Um dies zu beheben, fügen Sie secs = Math.round(secs); am Anfang der Methode hinzu. Natürlich haben wir diesen Fehler während der Demo gesehen...

33voto

meiyang Punkte 381
function formatTime(seconds) {
    return [
        parseInt(seconds / 60 / 60),
        parseInt(seconds / 60 % 60),
        parseInt(seconds % 60)
    ]
        .join(":")
        .replace(/\b(\d)\b/g, "0$1")
}

1 Stimmen

Weitere Erläuterungen darüber, warum diese Antwort für den Fragesteller funktionieren würde oder was möglicherweise im ursprünglichen Frage hätte falsch sein können, würden die Qualität dieser Antwort verbessern.

2 Stimmen

Ziemlich selbsterklärend und gute Antwort, die beste Antwort wurde reduziert und vereinfacht.

0 Stimmen

Genau Antwort: )

32voto

jottos Punkte 19628

Variation on a theme. Handles single digit seconds a little differently

seconds2time(0)  ->  "0s" 
seconds2time(59) -> "59s" 
seconds2time(60) -> "1:00" 
seconds2time(1000) -> "16:40" 
seconds2time(4000) -> "1:06:40"

function seconds2time (seconds) {
    var hours   = Math.floor(seconds / 3600);
    var minutes = Math.floor((seconds - (hours * 3600)) / 60);
    var seconds = seconds - (hours * 3600) - (minutes * 60);
    var time = "";

    if (hours != 0) {
      time = hours+":";
    }
    if (minutes != 0 || time !== "") {
      minutes = (minutes < 10 && time !== "") ? "0"+minutes : String(minutes);
      time += minutes+":";
    }
    if (time === "") {
      time = seconds+"s";
    }
    else {
      time += (seconds < 10) ? "0"+seconds : String(seconds);
    }
    return time;
}

0 Stimmen

Vielen Dank, dass du mir eine Stunde Zeit gespart hast.

15voto

Pradeep Punkte 418

Verwendung der erstaunlichen moment.js Bibliothek:

function humanizeDuration(input, units ) { 
  // units is a string with possible values of y, M, w, d, h, m, s, ms
  var duration = moment().startOf('day').add(units, input),
    format = "";

  if(duration.hour() > 0){ format += "H [Stunden] "; }

  if(duration.minute() > 0){ format += "m [Minuten] "; }

  format += " s [Sekunden]";

  return duration.format(format);
}

Dies ermöglicht es Ihnen, jede beliebige Dauer anzugeben, sei es Stunden, Minuten, Sekunden, Millisekunden, und gibt eine menschenlesbare Version zurück.

15voto

Serge K. Punkte 341

Ich mag die erste Antwort. Es gibt einige Optimierungen:

  • Die Quelldaten sind eine Nummer. Zusätzliche Berechnungen sind nicht erforderlich.

  • Viel überflüssige Berechnung

Ergebniscode:

Number.prototype.toHHMMSS = function () {
    var seconds = Math.floor(this),
        hours = Math.floor(seconds / 3600);
    seconds -= hours*3600;
    var minutes = Math.floor(seconds / 60);
    seconds -= minutes*60;

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

1 Stimmen

Ich denke, diese Funktion wird im Frontend verwendet und daher prototypiere ich String und nicht Number. Und Number kann immer ein String sein, aber nicht andersherum.

4 Stimmen

Ich denke, dass Number richtig ist, weil Sekunden tatsächlich eine Zahl ist. Bevor du diese Funktion verwendest, solltest du von String in eine Zahl konvertieren, was das Richtige ist, zu tun!

4 Stimmen

Bewertete Antwort, genau wie diese hier, sind schlecht. Ich wette, du brauchst nicht ALLE Zahlen, um diese Methode zu haben. Modifiziere nicht den Prototyp für zufällige Hilfswerkzeuge.

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