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

1voto

Peter Zehnder Punkte 11

Ich persönlich bevorzuge die führende Einheit (Tage, Stunden, Minuten) ohne führende Nullen. Aber Sekunden sollten immer von Minuten geführt werden (0:13), diese Darstellung wird leicht als 'Dauer' betrachtet, ohne weitere Erklärung (Markierung als min, Sek., usw.), verwendbar in verschiedenen Sprachen (Internationalisierung).

    // gibt  (-)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);
    }

//imitiert die serverseitige (.net, C#) Zeiterfassung 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));
    }

1voto

Israel Punkte 719
secToHHMM(nummer: number) {
    debugger;
    let stunden = Math.floor(nummer / 3600);
    let minuten = Math.floor((nummer - (stunden * 3600)) / 60);
    let sekunden = nummer - (stunden * 3600) - (minuten * 60);
    let H, M, S;
    if (stunden < 10) H = ("0" + stunden);
    if (minuten < 10) M = ("0" + minuten);
    if (sekunden < 10) S = ("0" + sekunden);
    return (H || stunden) + ':' + (M || minuten) + ':' + (S || sekunden);
}

1voto

artnikpro Punkte 4957
/**
 * Formatiert Sekunden (Nummer) in das Format H:i:s.
 * 00:12:00
 *
 * Wenn die "short" Option auf true gesetzt ist, wird zurückgegeben:
 * 0:50
 * 2:00
 * 12:00
 * 1:00:24
 * 10:00:00
 */
export default function formatTimeHIS (seconds, { short = false } = {}) {
  const pad = num => num < 10 ? `0${num}` : num

  const H = pad(Math.floor(seconds / 3600))
  const i = pad(Math.floor(seconds % 3600 / 60))
  const s = pad(seconds % 60)

  if (short) {
    let result = ''
    if (H > 0) result += `${+H}:`
    result += `${H > 0 ? i : +i}:${s}`
    return result
  } else {
    return `${H}:${i}:${s}`
  }
}

0voto

Max Yari Punkte 3437

Ich habe gesehen, dass alle ihre Ansichten zu dem Problem posten, obwohl bereits wenige Top-Antworten alle notwendigen Informationen enthalten, um sie für den spezifischen Anwendungsfall anzupassen.

Und da ich auch hip sein will - hier ist meine unnötige und etwas umständliche Lösung, die lautet:

a) Lesbar (hoffentlich!)
b) Leicht anpassbar
c) Gibt keine Nullen aus

Trommelwirbel

function durationToDDHHMMSSMS(durms) {
    if (!durms) return "??";

    var HHMMSSMS = new Date(durms).toISOString().substr(11, 12);
    if (!HHMMSSMS) return "??";

    var HHMMSS = HHMMSSMS.split(".")[0];
    if (!HHMMSS) return "??";

    var MS = parseInt(HHMMSSMS.split(".")[1],10);
    var split = HHMMSS.split(":");
    var SS = parseInt(split[2],10);
    var MM = parseInt(split[1],10);
    var HH = parseInt(split[0],10); 
    var DD = Math.floor(durms/(1000*60*60*24));

    var string = "";
    if (DD) string += ` ${DD}d`;
    if (HH) string += ` ${HH}h`;
    if (MM) string += ` ${MM}m`;
    if (SS) string += ` ${SS}s`;
    if (MS) string += ` ${MS}ms`;

    return string;
},

Beachten Sie, dass dieser Code ES6-Vorlagenzeichenfolgen verwendet. Ich bin sicher, dass ein so kluger Kopf wie Sie keine Schwierigkeiten haben wird, sie bei Bedarf durch reguläre Zeichenfolgen zu ersetzen.

0voto

Hier ist eine ES6-Version davon:

export const parseTime = (time) => { // sende Zeit in Sekunden
// eslint-disable-next-line 
let hours = parseInt(time / 60 / 60), mins = Math.abs(parseInt(time / 60) - (hours * 60)), seconds = Math.round(time % 60);
return isNaN(hours) || isNaN(mins) || isNaN(seconds) ? `00:00:00` : `${hours > 9 ? Math.max(hours, 0) : '0' + Math.max(hours, 0)}:${mins > 9 ? Math.max(mins, 0) : '0' + Math.max(0, mins)}:${seconds > 9 ? Math.max(0, seconds) : '0' + Math.max(0, seconds)}`;}

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