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

8voto

nïkö Punkte 79

Ich mochte Webjins Antwort am meisten, daher habe ich sie erweitert, um Tage mit einem d-Suffix anzuzeigen, die Anzeige bedingt gemacht und ein s-Suffix für einfache Sekunden hinzugefügt:

function sec2str(t) {
    var d = Math.floor(t/86400),
        h = ('0'+Math.floor(t/3600) % 24).slice(-2),
        m = ('0'+Math.floor(t/60)%60).slice(-2),
        s = ('0' + t % 60).slice(-2);
    return (d>0?d+'d ':'')+(h>0?h+':':'')+(m>0?m+':':'')+(t>60?s:s+'s');
}

gibt "3d 16:32:12" oder "16:32:12" oder "32:12" oder "12s" zurück

0 Stimmen

Dies wird für Zeiträume von 24 Tagen oder länger ungenau sein

0 Stimmen

Warum vergleichst du Zeichenfolgen größer als 0?

0 Stimmen

@JimmyKane wegen automatischer Typumwandlung - ich liiiebe es! (zusätzlich: Der Code ist einfacher zu lesen (du hast Typumwandlung aus einem bestimmten Grund, aber lass uns aufhören zu trollen (beide von uns)). Plus: Die Funktion würde nur fehlschlagen, wenn t NaN ist - also, wenn du Sicherheit willst: Tu es bei der Eingabe!)

7voto

Mordred Punkte 3222

Ich mochte Powtacs Antwort, aber ich wollte sie in Angular.js verwenden, also habe ich einen Filter mit seinem Code erstellt.

.filter('HHMMSS', ['$filter', function ($filter) {
    return function (input, decimals) {
        var sec_num = parseInt(input, 10),
            decimal = parseFloat(input) - sec_num,
            hours   = Math.floor(sec_num / 3600),
            minutes = Math.floor((sec_num - (hours * 3600)) / 60),
            seconds = sec_num - (hours * 3600) - (minutes * 60);

        if (hours   < 10) {hours   = "0"+hours;}
        if (minutes < 10) {minutes = "0"+minutes;}
        if (seconds < 10) {seconds = "0"+seconds;}
        var time    = hours+':'+minutes+':'+seconds;
        if (decimals > 0) {
            time += '.' + $filter('number')(decimal, decimals).substr(2);
        }
        return time;
    };
}])

Es ist funktional identisch, nur dass ich ein optionales Dezimalstellenfeld hinzugefügt habe, um Bruchteile von Sekunden anzuzeigen. Verwenden Sie es wie jeden anderen Filter:

{{ elapsedTime | HHMMSS }} zeigt an: 01:23:45

{{ elapsedTime | HHMMSS : 3 }} zeigt an: 01:23:45.678

0 Stimmen

Ich habe zwei Datums- und Zeitobjekte und möchte den Unterschied zwischen diesen beiden Datums- und Zeitobjekten berechnen und die Ausgabe in diesem Format zurückgeben: Stunde: Minuten: Sekunden mit doppelter Ziffer wie: 01:02:45. Können Sie mir bitte sagen oder mir mit Ihrem Code etwas Hilfe geben??

5voto

Petr Újezdský Punkte 1152

Die allgemeinste Antwort darauf ist

function hms(seconds) {
  return [3600, 60]
    .reduceRight(
      (p, b) => r => [Math.floor(r / b)].concat(p(r % b)),
      r => [r]
    )(seconds)
    .map(a => a.toString().padStart(2, '0'))
    .join(':');
}

Einige Beispielausgaben:

> hms(0)
< "00:00:00"

> hms(5)
< "00:00:05"

> hms(60)
< "00:01:00"

> hms(3785)
< "01:03:05"

> hms(37850)
< "10:30:50"

> hms(378500)
< "105:08:20"

Siehe Erklärung unter https://stackoverflow.com/a/66504936/1310733

4voto

RyadPasha Punkte 143
function secToTime(seconds, separator) {
    return [
        parseInt(seconds / 60 / 60),
        parseInt(seconds / 60 % 60),
        parseInt(seconds % 60)
    ].join(separator ? separator : ':')
    .replace(/\b(\d)\b/g, "0$1").replace(/^00\:/,'')
}

Sie können es jetzt verwenden wie:

alert(secToTime("123"));

Arbeitsauszug:

function secToTime(seconds, separator) {
return [
    parseInt(seconds / 60 / 60),
    parseInt(seconds / 60 % 60),
    parseInt(seconds % 60)
].join(separator ? separator : ':')
.replace(/\b(\d)\b/g, "0$1").replace(/^00\:/,'')
}

console.log(secToTime("123"));

4voto

M Katz Punkte 4772

Hier ist noch eine Version, die auch Tage behandelt:

function FormatSecondsAsDurationString( Sekunden )
{
    var s = "";

    var Tage = Math.floor( ( Sekunden / 3600 ) / 24 );
    if ( Tage >= 1 )
    {
        s += Tage.toString() + " Tag" + ( ( Tage == 1 ) ? "" : "e" ) + " + ";
        Sekunden -= Tage * 24 * 3600;
    }

    var Stunden = Math.floor( Sekunden / 3600 );
    s += GetPaddedIntString( Stunden.toString(), 2 ) + ":";
    Sekunden -= Stunden * 3600;

    var Minuten = Math.floor( Sekunden / 60 );
    s += GetPaddedIntString( Minuten.toString(), 2 ) + ":";
    Sekunden -= Minuten * 60;

    s += GetPaddedIntString( Math.floor( Sekunden ).toString(), 2 );

    return s;
}

function GetPaddedIntString( n, numDigits )
{
    var nGepolstert = n;
    for ( ; nGepolstert.length < numDigits ; )
    {
        nGepolstert = "0" + nGepolstert;
    }

    return nGepolstert;
}

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