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

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.

16voto

Mr. Polywhirl Punkte 34960

Hier ist ein Beispiel für die Verwendung von Date.prototype.toLocaleTimeString(). Ich habe GB als Sprache gewählt, weil die USA eine 24 anstelle einer 00 für die anfängliche Stunde anzeigen. Außerdem habe ich Etc/UTC als Zeitzone gewählt, weil UTC in der Liste der IANA-Zeitzonen darauf verweist.

const formatTime = (Sekunden) =>
  new Date(Sekunden * 1000).toLocaleTimeString('en-GB', {
    timeZone:'Etc/UTC',
    hour12: false,
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
  });

console.log(formatTime(75)); // 00:01:15

.as-console-wrapper { top: 0; max-height: 100% !important; }

Hier ist das gleiche Beispiel, aber mit Intl.DateTimeFormat. Diese Variante ermöglicht es Ihnen, ein wiederverwendbares Formatter-Objekt zu instanziieren, was performanter ist.

const dateFormatter = new Intl.DateTimeFormat('en-GB', {
  timeZone:'Etc/UTC',
  hour12: false,
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit'
});

const formatTime = (Sekunden) => dateFormatter.format(new Date(Sekunden * 1000));

console.log(formatTime(75)); // 00:01:15

.as-console-wrapper { top: 0; max-height: 100% !important; }

1 Stimmen

Wenn die Zeit größer ist als 24 Stunden (86400 Sekunden), werden falsche Ergebnisse angezeigt.

0 Stimmen

Dies ist erstaunlich clever. Danke!

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.

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