JavaScript Sekunden bis Zeit Zeichenfolge mit Format hh: mm: ss


300

Ich möchte eine Zeitdauer, dh die Anzahl der Sekunden, in eine durch Doppelpunkte getrennte Zeitzeichenfolge (hh: mm: ss) konvertieren.

Ich habe hier einige nützliche Antworten gefunden, aber alle sprechen von der Konvertierung in das Format x Stunden und x Minuten.

Gibt es also einen winzigen Ausschnitt, der dies in jQuery oder nur in rohem JavaScript ausführt?


11
Benchmarks einiger der vorgeschlagenen Antworten in diesem Thread. jsperf.com/ms-to-hh-mm-ss-time-format
Claudijo

Antworten:


583
String.prototype.toHHMMSS = function () {
    var sec_num = parseInt(this, 10); // don't forget the second param
    var hours   = Math.floor(sec_num / 3600);
    var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
    var 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;}
    return hours+':'+minutes+':'+seconds;
}

Sie können es jetzt wie folgt verwenden:

alert("5678".toHHMMSS());

Arbeitsausschnitt:


1
Vielen Dank für die Idee des Prototyps. Mir gefällt, wie einfach es ist, sie zu nennen. Ich habe die Nummer als Prototyp erstellt, damit ich sie auch bei ihnen anrufen kann. Ich fand auch diese Antwort , die die Stunden und Minuten entfernen würde, wenn sie nicht benötigt würden.
Alunsford3

21
benutze den Operator "%" >> var Minuten = Math.floor ((sec_num% 3600) / 60); var Sekunden = Math.floor (sec_num% 60);
IvanM

3
ah danke. Ich sehe es nicht als Zeichenfolge in beide Richtungen, bis Sie .toString () für die Ganzzahl aufrufen. Sie können es umgekehrt funktionieren lassen, indem Sie auch int analysieren
Sonic Soul

51
Setzen Sie den Prototyp nicht ein, sondern erstellen Sie eine Utility-Funktion.
Michael J. Calkins

15
Prototyp für so etwas modifizieren? 390 positive Stimmen? Ernsthaft?
Lukas Liesis

197

Sie können dies ohne externe JS-Bibliothek mithilfe der JS Date-Methode wie folgt tun:

var date = new Date(0);
date.setSeconds(45); // specify value for SECONDS here
var timeString = date.toISOString().substr(11, 8);
console.log(timeString)


4
Warum ist diese Antwort so niedrig? Ich bekomme es im Jahr 2011 wahrscheinlich IE 7 und 8 war die Basis, die es nicht unterstützen wird, aber es ist Ende 2014, also sollte diese einfache, unkomplizierte Lösung viel höher sein.
Emil Borconi

2
Von MDN: Wenn ein von Ihnen angegebener Parameter außerhalb des erwarteten Bereichs liegt, versucht setSeconds (), die Datumsinformationen im Date-Objekt entsprechend zu aktualisieren. Wenn Sie beispielsweise 100 für Sekundenwert verwenden, werden die im Datumsobjekt gespeicherten Minuten um 1 erhöht und 40 für Sekunden. Also ja, sieht gut aus!
Andrew

40
Ich mag diese Antwort. Es kann noch kürzer sein : new Date(1000 * seconds).toISOString().substr(11, 8).
Bohumir Zamecnik

4
Gute Antwort. Sie können .replace(/^[0:]+/, "")after verwenden substr, um alle Nullen und :vom Anfang der Zeichenfolge zu entfernen .
Palo

1
Fügen Sie dies vor, um die Zeit über 24 Stunden zu bewältigen. parseInt (d / 86400) + "d"
Tofandel

82

Um den Zeitteil im Format abzurufen hh:MM:ss, können Sie diesen regulären Ausdruck verwenden:

(Dies wurde oben im selben Beitrag von jemandem erwähnt, danke dafür.)

    var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
    console.log(myDate)


8
+1 - Super einfach; Vielen Dank! Ich habe gerade eine Variante davon verwendet, um nur die Minuten und Sekunden var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
anzuzeigen

1
sollte das nicht "neues Datum (null, null, null, null, null, timeInSecs) sein .toTimeString (). replace (/.* (\ d {2} :) (\ d {2}: \ d {2 }). * /, "$ 2") "?
Obie

6
Die Verwendung von replaceist verwirrend. Warum nicht verwenden new Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]?
Călin Darie

4
Dies ist in Ordnung, um eine bestimmte Zeit anzuzeigen. Beachten Sie jedoch, dass es bei der Frage (und anderen Antworten hier) darum geht, eine Dauer anzuzeigen, dh eine bestimmte Anzahl von Sekunden, unabhängig von der aktuellen Zeit.
Mahemoff

4
Einfachere Version davon:new Date().toTimeString().split(" ")[0]
Henrik N

52

Ich empfehle gewöhnliches Javascript mit dem Date-Objekt:

var seconds = 9999;
// multiply by 1000 because Date() requires miliseconds
var date = new Date(seconds * 1000);
var hh = date.getUTCHours();
var mm = date.getUTCMinutes();
var ss = date.getSeconds();
// If you were building a timestamp instead of a duration, you would uncomment the following line to get 12-hour (not 24) time
// if (hh > 12) {hh = hh % 12;}
// These lines ensure you have two-digits
if (hh < 10) {hh = "0"+hh;}
if (mm < 10) {mm = "0"+mm;}
if (ss < 10) {ss = "0"+ss;}
// This formats your string to HH:MM:SS
var t = hh+":"+mm+":"+ss;
document.write(t);

(Natürlich ist dem erstellten Datumsobjekt ein tatsächliches Datum zugeordnet, aber diese Daten sind irrelevant, sodass Sie sich für diese Zwecke keine Sorgen machen müssen.)


Es scheint das Datum in der lokalen Zeitzone zu machen, was in meinem Fall 1 Stunde zur Zeit hinzufügt. Mit Sekunden = 0 erhalte ich "01:00:00" (Do 01.01.1970 01:00:00 GMT + 0100 (MEZ)), was falsch ist.
Mivk

3
Ich erhalte ein korrektes Ergebnis, wenn ich date.getUTCHours()und verwende date.getUTCMinutes().
Mivk

Ich verstehe nicht, warum Sie einen 12-Stunden-Zeitstempel zurückgeben, wenn er nach einer Dauer gefragt hat?
Nathan C. Tresch

@JellicleCat Geändert in +1 und netter Name.
Nathan C. Tresch

1
Ich mag das, aber es geht davon aus, dass die Dauer weniger als 24 Stunden beträgt
Rory

40

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
secondsToTime(119.9)=> Object {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 ...
Benjamin Crouzier

29

Variation eines Themas. Behandelt einstellige Sekunden etwas anders

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

Vielen Dank, dass Sie mir eine Stunde Zeit gespart haben
Starsinmypockets

29

Hier ist meine Meinung dazu:

function formatTime(seconds) {
  const h = Math.floor(seconds / 3600);
  const m = Math.floor((seconds % 3600) / 60);
  const s = Math.round(seconds % 60);
  return [
    h,
    m > 9 ? m : (h ? '0' + m : m || '0'),
    s > 9 ? s : '0' + s
  ].filter(Boolean).join(':');
}

Erwartete Ergebnisse:

const expect = require('expect');
expect(formatTime(0)).toEqual('0:00');
expect(formatTime(1)).toEqual('0:01');
expect(formatTime(599)).toEqual('9:59');
expect(formatTime(600)).toEqual('10:00');
expect(formatTime(3600)).toEqual('1:00:00');
expect(formatTime(360009)).toEqual('100:00:09');
expect(formatTime(0.2)).toEqual('0:00');

Sie könnten dies schreiben als: const formatTime = (seconds, h = Math.floor(seconds / 3600), m = Math.floor((seconds % 3600) / 60), s = seconds % 60) => [h, m > 9 ? m : '0' + m, s > 9 ? s : '0' + s].filter(s => s).join(':');
Ruben Stolk

2
@RubenStolk Ich finde es etwas verwirrend, eine Funktion zu haben, die zwei secondArgumente akzeptiert . Ich finde meine Version klarer, auch wenn sie etwas ausführlicher ist.
Tom Esterez

seconds: numberTyp Anmerkungen, in es6?
Olian04

1
@pstanton Trailing Comma wird seit IE9 unterstützt: caniuse.com/#feat=mdn-javascript_grammar_trailing_commas . Ich persönlich habe mich entschieden, diese alten Browser jetzt zu ignorieren. Aber du hast recht, ich habe es entfernt, damit die Antwort allgemeiner ist.
Tom Esterez

1
Tolle Lösung. Vielleicht ändern Sie einfach die Sekunden alsconst s = Math.round(seconds % 60);
Raff

16

Ich mag die erste Antwort. Es gibt einige Optimierungen:

  • Quelldaten sind eine Zahl. zusätzliche Berechnungen sind nicht erforderlich.

  • viel überschüssiges Computing

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
Ich denke, diese Funktion ist eine Funktion, die in der Front verwendet wird, und deshalb habe ich den Prototyp String und nicht Number. Und Number kann immer eine Zeichenfolge sein, aber nicht umgekehrt.
Powtac

3
Ich denke, es Numberist richtig, weil secondses tatsächlich eine Zahl ist. Sie sollten aus einem String konvertieren, bevor Sie diese Funktion verwenden, was das Richtige ist!
Caesarsol

2
Eine hochgestimmte Antwort, genau wie diese, ist schlecht. Ich wette, Sie brauchen nicht ALLE Zahlen, um diese Methode zu haben. Ändern Sie den Prototyp nicht für zufällige Dienstprogramme.
Lukas Liesis

oder einfach nur als Prototyp und als Funktion numToHHMMSS oder strTOHHMMSS
yeahdixon

Diese Lösung funktioniert, während die ausgewählte Lösung für bestimmte Werte Sekunden von 60 generiert.
AndroidDev

14

Verwenden der erstaunlichen Bibliothek moment.js :

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 [hours] "; }

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

  format += " s [seconds]";

  return duration.format(format);
}

Auf diese Weise können Sie eine beliebige Dauer angeben, sei es Stunden, Minuten, Sekunden, Mühlen, und eine für Menschen lesbare Version zurückgeben.


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

Eine weitere Erklärung, warum diese Antwort für den Fragesteller funktionieren würde oder was in der ursprünglichen Frage möglicherweise falsch war, würde dazu beitragen, die Qualität dieser Antwort zu verbessern.
Josh Burgess

1
Ziemlich selbsterklärend und gute Antwort, reduzierte und vereinfachte die Top-Antwort.
AlexioVay

Präzise Antwort
:)

11

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

Ergebnis 15:08:03


Nett, danke! Eine kleine Verbesserung, die ich für meine Anforderungen vorgenommen habe, war die Konvertierung einer Dauer in Millisekunden in HH: MM: SS - new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]wo startTimezuvor festgelegt startTime = new Date().getTime();. (Ich musste verwenden, toUTCString()weil sonst die Zeiten eine Stunde aus waren.)
Richard Wiseman

10

Es ist ziemlich einfach,

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

Dies funktioniert nur, wenn Ihre Zeitdauer weniger als 1 Tag beträgt. Aber sonst ganz nett.
CJBarth

8
s2t=function (t){
  return parseInt(t/86400)+'d '+(new Date(t%86400*1000)).toUTCString().replace(/.*(\d{2}):(\d{2}):(\d{2}).*/, "$1h $2m $3s");
}

s2t(123456);

Ergebnis:

1d 10h 17m 36s

6

Die Antwort von Webjins hat mir am besten gefallen, daher habe ich sie auf die Anzeige von Tagen mit Anzeigensuffix erweitert, die Anzeige an Bedingungen geknüpft und als Suffix in einfachen Sekunden eingefü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


Dies wird für eine Dauer von 24 Tagen oder länger falsch sein
Charlie Martin

Warum vergleichen Sie Zeichenfolgen größer als 0?
Jimmy Kane

@ JimmyKane weil automatisches Typecasting - ich liebe es! (Plus: Code ist einfacher zu lesen (Sie haben aus einem bestimmten Grund Typografie, aber hören wir auf zu trollen (wir beide)). Plus: Die Funktion würde nur fehlschlagen, wenn t NaN ist. Wenn Sie also Sicherheit wünschen: tun es am Eingang!)
nïkö

@ nïkö Ok, ich verstehe, aber strengere neue JS-Versionen, Linters usw. können sich darüber beschweren. Ich sage nur, versteh mich nicht falsch. Ich mag Ihre Antwort
Jimmy Kane

6

Ich habe Powtacs Antwort geliebt, aber ich wollte sie in angle.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, außer dass ich ein optionales Dezimalfeld hinzugefügt habe, um Sekundenbruchteile anzuzeigen. Verwenden Sie es wie jeden anderen Filter:

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

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


Ich habe zwei datetime-Objekte und möchte die Differenz dieses 2 datetime-Objekts berechnen und die Ausgabe wie folgt zurückgeben: Stunde: Minuten: Sekunden mit zweistelligen Zahlen wie: 01: 02: 45. Können Sie mir bitte etwas sagen oder mich wenig führen? mit deinem Code?
Learning-Overthinker-Confused

4

Ich denke, was die Leistung betrifft, ist dies bei weitem die schnellste:

var t = 34236; // your seconds
var time = ('0'+Math.floor(t/3600) % 24).slice(-2)+':'+('0'+Math.floor(t/60)%60).slice(-2)+':'+('0' + t % 60).slice(-2)
//would output: 09:30:36

Wirklich unglaublich. Glückwunsch!
Brynner Ferreira

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

4
function toHHMMSS(seconds) {
    var h, m, s, result='';
    // HOURs
    h = Math.floor(seconds/3600);
    seconds -= h*3600;
    if(h){
        result = h<10 ? '0'+h+':' : h+':';
    }
    // MINUTEs
    m = Math.floor(seconds/60);
    seconds -= m*60;
    result += m<10 ? '0'+m+':' : m+':';
    // SECONDs
    s=seconds%60;
    result += s<10 ? '0'+s : s;
    return result;
}

Beispiele

    toHHMMSS (111); 
    "01:51"

    toHHMMSS (4444);
    "01:14:04"

    toHHMMSS (33);
    "00:33"

Ich würde auch Math.floor()die Sekunden aufschreiben, da sie möglicherweise in Dezimalstellen angegeben werden. (Ist mit mir passiert.)
Winter

3

Hier ist noch eine andere Version, die auch Tage behandelt:

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

    var days = Math.floor( ( seconds / 3600 ) / 24 );
    if ( days >= 1 )
    {
        s += days.toString() + " day" + ( ( days == 1 ) ? "" : "s" ) + " + ";
        seconds -= days * 24 * 3600;
    }

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

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

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

    return s;
}

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

    return nPadded;
}

3

Ein regulärer Ausdruck kann verwendet werden, um die Zeitzeichenfolge in der Zeichenfolge toString()abzugleichen, die von der Methode des Date-Objekts zurückgegeben wurde. Diese ist wie folgt formatiert: "Do 05.07.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 einzeilig sein, obwohl die Aufteilung das Verständnis erheblich erleichtert.

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

2

So habe ich es gemacht. Es scheint ziemlich gut zu funktionieren und ist extrem kompakt. (Es werden jedoch viele ternäre Operatoren verwendet.)

function formatTime(seconds) {
  var hh = Math.floor(seconds / 3600),
    mm = Math.floor(seconds / 60) % 60,
    ss = Math.floor(seconds) % 60;
  return (hh ? (hh < 10 ? "0" : "") + hh + ":" : "") + ((mm < 10) && hh ? "0" : "") + mm + ":" + (ss < 10 ? "0" : "") + ss
}

... und zum Formatieren von Strings ...

String.prototype.toHHMMSS = function() {
  formatTime(parseInt(this, 10))
};

2

Mit der folgenden Funktion können Sie die Zeit (in Sekunden) in das HH:MM:SSFormat konvertieren:

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

Ohne ein Trennzeichen zu übergeben, wird es :als (Standard-) Trennzeichen verwendet:

time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51

Wenn Sie -als Trennzeichen verwenden möchten , übergeben Sie es einfach als zweiten Parameter:

time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46

Demo

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

document.body.innerHTML = '<pre>' + JSON.stringify({
    5.3515555 : convertTime(5.3515555),
    126.2344452 : convertTime(126.2344452, '-'),
    1156.1535548 : convertTime(1156.1535548, '.'),
    9178.1351559 : convertTime(9178.1351559, ':'),
    13555.3515135 : convertTime(13555.3515135, ',')
}, null, '\t') +  '</pre>';

Siehe auch diese Geige .



1

So habe ich es gemacht

function timeFromSecs(seconds)
{
    return(
    Math.floor(seconds/86400)+'d :'+
    Math.floor(((seconds/86400)%1)*24)+'h : '+
    Math.floor(((seconds/3600)%1)*60)+'m : '+
    Math.round(((seconds/60)%1)*60)+'s');
}

timeFromSecs (22341938) gibt '258d 14h 5m 38s' zurück.


1

Ich persönlich bevorzuge die führende Einheit (Tage, Stunden, Minuten) ohne führende Nullen. Sekunden sollten jedoch immer von Minuten (0:13) angeführt werden. Diese Präsentation kann ohne weitere Erklärung (Kennzeichnung als min, sec (s) usw.) leicht als "Dauer" betrachtet werden und kann in verschiedenen Sprachen verwendet werden (Internationalisierung).

    // returns  (-)d.h:mm:ss(.f)
    //          (-)h:mm:ss(.f)
    //          (-)m:ss(.f)
    function formatSeconds (value, fracDigits) {
        var isNegative = false;
        if (isNaN(value)) {
            return value;
        } else if (value < 0) {
            isNegative = true;
            value = Math.abs(value);
        }
        var days = Math.floor(value / 86400);
        value %= 86400;
        var hours = Math.floor(value / 3600);
        value %= 3600;
        var minutes = Math.floor(value / 60);
        var seconds = (value % 60).toFixed(fracDigits || 0);
        if (seconds < 10) {
            seconds = '0' + seconds;
        }

        var res = hours ? (hours + ':' + ('0' + minutes).slice(-2) + ':' + seconds) : (minutes + ':' + seconds);
        if (days) {
            res = days + '.' + res;
        }
        return (isNegative ? ('-' + res) : res);
    }

// Nachahmung der serverseitigen (.net, C #) Dauer Formatierung wie:

    public static string Format(this TimeSpan interval)
    {
        string pattern;
        if (interval.Days > 0)          pattern = @"d\.h\:mm\:ss";
        else if (interval.Hours > 0)    pattern = @"h\:mm\:ss";
        else                            pattern = @"m\:ss";
        return string.Format("{0}", interval.ToString(pattern));
    }

1

Sie können Momement.js mit dem Plugin für das Moment-Dauer-Format verwenden :

var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40
<!-- Moment.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

<!-- moment-duration-format plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

Siehe auch diese Geige


Funktioniert wie ein Zauber (außer Format, das nicht definiert ist), um eine Dauer in einem Objekt mit Monaten, Tagen, Stunden, Minuten und Sekunden zu konvertieren
Pi Home Server

1

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

Dabei ist der Gebietsschema-Parameter ("en", "de" usw.) optional


1
secToHHMM(number: number) {
    debugger;
    let hours = Math.floor(number / 3600);
    let minutes = Math.floor((number - (hours * 3600)) / 60);
    let seconds = number - (hours * 3600) - (minutes * 60);
    let H, M, S;
    if (hours < 10) H = ("0" + hours);
    if (minutes < 10) M = ("0" + minutes);
    if (seconds < 10) S = ("0" + seconds);
    return (H || hours) + ':' + (M || minutes) + ':' + (S || seconds);
}

1

Hier ist ein Einzeiler, der für 2019 aktualisiert wurde:

//your date
var someDate = new Date("Wed Jun 26 2019 09:38:02 GMT+0100") 

var result = `${String(someDate.getHours()).padStart(2,"0")}:${String(someDate.getMinutes()).padStart(2,"0")}:${String(someDate.getSeconds()).padStart(2,"0")}`

//result will be "09:38:02"

Ich denke, das OP möchte eine Dauer (Sekunden) konvertieren, kein DateObjekt.
mrdaliri

Ups, mein schlechtes :(
DataGreed

1

Hier ist eine ziemlich einfache Lösung, die auf die nächste Sekunde rundet!

var returnElapsedTime = function(epoch) {
  //We are assuming that the epoch is in seconds
  var hours = epoch / 3600,
      minutes = (hours % 1) * 60,
      seconds = (minutes % 1) * 60;
  return Math.floor(hours) + ":" + Math.floor(minutes) + ":" + Math.round(seconds);
}


1

Dies ist eine, die ich kürzlich für MM: SS geschrieben habe. Es ist nicht genau auf die Frage, aber es ist ein anderes Einzeiler-Format.

const time = 60 * 2 + 35; // 2 minutes, 35 seconds
const str = (~~(time / 60) + "").padStart(2, '0') + ":" + (~~((time / 60) % 1 * 60) + "").padStart(2, '0');

str // 02:35

Bearbeiten: Dies wurde aus Gründen der Abwechslung hinzugefügt, aber die beste Lösung hier ist https://stackoverflow.com/a/25279399/639679 unten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.