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

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.

14voto

Hung Vo Punkte 401

Es ist ziemlich einfach,

function toTimeString(seconds) {
  return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}

0 Stimmen

Dies funktioniert nur, wenn Ihre Zeitdauer weniger als 1 Tag beträgt. Ansonsten ziemlich gut.

11voto

Artem Kyba Punkte 835

new Date().toString().split(" ")[4];

Ergebnis 15:08:03

0 Stimmen

Schön - danke! Und eine kleine Verbesserung, die ich für meine Bedürfnisse gemacht habe, war die Umwandlung einer Dauer in Millisekunden in HH:MM:SS -- new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4] wo startTime zuvor mit startTime = new Date().getTime(); gesetzt wurde. (Ich musste toUTCString() verwenden, weil die Zeiten sonst eine Stunde daneben lagen.)

11voto

Arjun Kava Punkte 3897

Am einfachsten ist es, es zu tun.

new Date(sec * 1000).toISOString().substr(11, 8)

5 Stimmen

Zur Info: Dies erfolgt im Modulo 24 Stunden, daher wird die Eingabe von 25 Stunden als 1 Stunde angezeigt. Sei vorsichtig.

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!)

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