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

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

3voto

Rutger van Baren Punkte 7884

Ich denke, dass dies in Bezug auf die Leistungsfähigkeit bei weitem das schnellste ist:

var t = 34236; // deine Sekunden
var time = ('0'+Math.floor(t/3600) % 24).slice(-2)+':'+('0'+Math.floor(t/60)%60).slice(-2)+':'+('0' + t % 60).slice(-2)
// würde ausgeben: 09:30:36

0 Stimmen

Wirklich beeindruckend. Herzlichen Glückwunsch!

0 Stimmen

Schön ... und >24 Stunden sicher.

2voto

Ninjakannon Punkte 3511

Ein regulärer Ausdruck kann verwendet werden, um den Zeit-Teilstring im aus der toString() Methode des Date-Objekts zurückgegebenen String zu finden, der folgendermaßen formatiert ist: "Do Jul 05 2012 02:45:12 GMT+0100 (GMT Daylight Time)". Beachten Sie, dass diese Lösung die Zeit seit der Epoche verwendet: Mitternacht des 1. Januar 1970. Diese Lösung kann in einer Zeile stehen, aber wenn man sie aufteilt, wird sie viel einfacher zu verstehen sein.

function secondsToTime(seconds) {
    const start = new Date(1970, 1, 1, 0, 0, 0, 0).getTime();
    const end = new Date(1970, 1, 1, 0, 0, parseInt(seconds), 0).getTime();
    const duration = end - start;

    return new Date(duration).toString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}

0 Stimmen

Zeitzonen mögen das nicht. Die Frage bezieht sich auf die Umrechnung von Sekunden in eine Dauer.

2voto

JukkaP Punkte 1755
const secondsToTime = (seconds, locale) => {
    const date = new Date(0);
    date.setHours(0, 0, seconds, 0);
    return date.toLocaleTimeString(locale);
}
console.log(secondsToTime(3610, "en"));

wo das Lokalisierungsparameter ("en", "de", etc.) optional ist

2voto

Boris Yakubchik Punkte 3027

Es gibt eine neue Methode für Strings auf dem Block: padStart

const str = '5';
str.padStart(2, '0'); // 05

Hier ist ein Beispiel für die Verwendung: YouTube-Dauern in 4 Zeilen JavaScript

0 Stimmen

Dies sollte ein Kommentar unter einer Antwort sein.

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