Frage

Wie kann ich konvertieren Sekunden auf eine HH-MM-SS String mit JavaScript?

War es hilfreich?

Lösung

Haben Sie nicht wissen, datejs ? es ist ein wissen muss.

datejs verwenden, schreiben Sie einfach so etwas wie:

(new Date).clearTime()
          .addSeconds(15457)
          .toString('H:mm:ss');

- update

Heute date.js ist veraltet und nicht gepflegt, so verwenden „ Moment.js “, das als spitze viel besser ist out von TJ Crowder.

Andere Tipps

Sie können verwalten, dies zu tun, ohne externe JavaScript-Bibliothek mit Hilfe von JavaScript-Date-Methode wie folgt:

var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);

Oder wie pro @Frank 's Kommentar; ein Motto:

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

Ich glaube keine integrierte Funktion des Standard-Date-Objekt wird dies in einer Art und Weise für Sie tun, was bequemer ist, als nur tun, die Mathematik selbst.

hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;

Beispiel:

let totalSeconds = 28565;
let hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
let minutes = Math.floor(totalSeconds / 60);
let seconds = totalSeconds % 60;

console.log("hours: " + hours);
console.log("minutes: " + minutes);
console.log("seconds: " + seconds);

// If you want strings with leading zeroes:
minutes = String(minutes).padStart(2, "0");
hours = String(hours).padStart(2, "0");
seconds = String(seconds).padStart(2, "0");
console.log(hours + ":" + minutes + ":" + seconds);

Ich weiß, das ist ein bisschen alt, aber ...

ES2015:

var toHHMMSS = (secs) => {
    var sec_num = parseInt(secs, 10)
    var hours   = Math.floor(sec_num / 3600)
    var minutes = Math.floor(sec_num / 60) % 60
    var seconds = sec_num % 60

    return [hours,minutes,seconds]
        .map(v => v < 10 ? "0" + v : v)
        .filter((v,i) => v !== "00" || i > 0)
        .join(":")
}

Es wird ausgegeben:

toHHMMSS(129600) // 36:00:00
toHHMMSS(13545) // 03:45:45
toHHMMSS(180) // 03:00
toHHMMSS(18) // 00:18

Wie wies Cleiton aus in seine Antwort , moment.js können dafür verwendet werden:

moment().startOf('day')
        .seconds(15457)
        .format('H:mm:ss');
function formatSeconds(seconds)
{
    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}

Dies funktioniert der Trick:

function secondstotime(secs)
{
    var t = new Date(1970,0,1);
    t.setSeconds(secs);
    var s = t.toTimeString().substr(0,8);
    if(secs > 86399)
        s = Math.floor((t - Date.parse("1/1/70")) / 3600000) + s.substr(2);
    return s;
}

(Das von hier )

     var  timeInSec = "661"; //even it can be string

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

            alert("5678".toHHMMSS());   // "01:34:38"
            console.log(timeInSec.toHHMMSS());   //"00:11:01"

Wir können diese Funktion viel kürzer machen und knackig, aber das verringert die Lesbarkeit, so dass wir es so einfach wie möglich schreiben werden und so stabil wie möglich.

oder Sie können diese Arbeit überprüfen hier :

Versuchen Sie diese:

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

Dies ist eine Erweiterung für Number-Klasse. toHHMMSS () konvertiert Sekunden bis eine hh: mm: ss-String.

Number.prototype.toHHMMSS = function() {
  var hours = Math.floor(this / 3600) < 10 ? ("00" + Math.floor(this / 3600)).slice(-2) : Math.floor(this / 3600);
  var minutes = ("00" + Math.floor((this % 3600) / 60)).slice(-2);
  var seconds = ("00" + (this % 3600) % 60).slice(-2);
  return hours + ":" + minutes + ":" + seconds;
}

// Usage: [number variable].toHHMMSS();

// Here is a simple test
var totalseconds = 1234;
document.getElementById("timespan").innerHTML = totalseconds.toHHMMSS();
// HTML of the test
<div id="timespan"></div>

Einfach zu folgen Version für noobies:

 var totalNumberOfSeconds = YOURNUMBEROFSECONDS;
 var hours = parseInt( totalNumberOfSeconds / 3600 );
 var minutes = parseInt( (totalNumberOfSeconds - (hours * 3600)) / 60 );
 var seconds = Math.floor((totalNumberOfSeconds - ((hours * 3600) + (minutes * 60))));
 var result = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds  < 10 ? "0" + seconds : seconds);
 console.log(result);

Diese Funktion sollte es tun:

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 Trennübergeben, verwendet es als : (default) Separator:

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

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

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

Siehe auch dieses Fiddle .

Ich wollte nur eine kleine Erklärung auf die nette Antwort geben über:

var totalSec = new Date().getTime() / 1000;
var hours = parseInt( totalSec / 3600 ) % 24;
var minutes = parseInt( totalSec / 60 ) % 60;
var seconds = totalSec % 60;

var result = (hours < 10 ? "0" + hours : hours) + "-" + (minutes < 10 ? "0" + minutes : minutes) + "-" + (seconds  < 10 ? "0" + seconds : seconds);

In der zweiten Zeile, da es 3600 Sekunden in 1 Stunde, wir die Gesamtzahl der Sekunden durch 3600 teilen sich die Gesamtzahl der Stunden zu erhalten. Wir verwenden ParseInt Zahlen auf- abzustreifen. Wenn totalSec 12600 war (3 ½ Stunden), dann parseInt (totalSec / 3600) würden 3 zurückkehren, da wir drei volle Stunden haben. Warum brauchen wir das% 24 in diesem Fall? Wenn wir 24 Stunden nicht übersteigen, lassen Sie uns sagen, dass wir 25 Stunden haben (90.000 Sekunden), dann ist hier die Modulo wird uns wieder auf 1 zurück, anstatt 25. Rückkehr Es ist das Ergebnis innerhalb von 24-Stunden-Grenze zu beschränken, da gibt es 24 Stunden in einem Tag.

Wenn Sie etwas sehen wie folgt aus:

25 % 24

Denken Sie daran, wie diese:

25 mod 24 or what is the remainder when we divide 25 by 24

Chiming in auf diesem alten Thread - die OP angegeben HH: MM: SS, und viele der Lösungen arbeiten, bis Sie erkennen, was Sie brauchen mehr als 24 Stunden aufgeführt. Und vielleicht wollen Sie nicht mehr als eine einzige Zeile Code. Hier gehen Sie:

d=(s)=>{f=Math.floor;g=(n)=>('00'+n).slice(-2);return f(s/3600)+':'+g(f(s/60)%60)+':'+g(s%60)}

Es gibt H +: MM: SS. Um es zu nutzen, verwenden Sie einfach:

d(91260);     // returns "25:21:00"
d(960);       // returns "0:16:00"

... Ich habe versucht, es zu bekommen die geringste Menge an Code möglich zu verwenden, für einen schönen Einzeiler Ansatz.

unten ist der angegebene Code, die Sekunden in hh-mm-ss-Format konvertieren:

var measuredTime = new Date(null);
measuredTime.setSeconds(4995); // specify value of SECONDS
var MHSTime = measuredTime.toISOString().substr(11, 8);

Get alternative Methode von Convert Sekunden HH-MM-SS-Format in JavaScript

var time1 = date1.getTime();
var time2 = date2.getTime();
var totalMilisec = time2 - time1;

alert(DateFormat('hh:mm:ss',new Date(totalMilisec)))

 /* ----------------------------------------------------------
 *  Field        | Full Form          | Short Form
 *  -------------|--------------------|-----------------------
 *  Year         | yyyy (4 digits)    | yy (2 digits)
 *  Month        | MMM (abbr.)        | MM (2 digits)
                 | NNN (name)         |
 *  Day of Month | dd (2 digits)      | 
 *  Day of Week  | EE (name)          | E (abbr)
 *  Hour (1-12)  | hh (2 digits)      | 
 *  Minute       | mm (2 digits)      | 
 *  Second       | ss (2 digits)      | 
 *  ----------------------------------------------------------
 */
function DateFormat(formatString,date){
    if (typeof date=='undefined'){
    var DateToFormat=new Date();
    }
    else{
        var DateToFormat=date;
    }
    var DAY         = DateToFormat.getDate();
    var DAYidx      = DateToFormat.getDay();
    var MONTH       = DateToFormat.getMonth()+1;
    var MONTHidx    = DateToFormat.getMonth();
    var YEAR        = DateToFormat.getYear();
    var FULL_YEAR   = DateToFormat.getFullYear();
    var HOUR        = DateToFormat.getHours();
    var MINUTES     = DateToFormat.getMinutes();
    var SECONDS     = DateToFormat.getSeconds();

    var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
    var arrDay=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
    var strMONTH;
    var strDAY;
    var strHOUR;
    var strMINUTES;
    var strSECONDS;
    var Separator;

    if(parseInt(MONTH)< 10 && MONTH.toString().length < 2)
        strMONTH = "0" + MONTH;
    else
        strMONTH=MONTH;
    if(parseInt(DAY)< 10 && DAY.toString().length < 2)
        strDAY = "0" + DAY;
    else
        strDAY=DAY;
    if(parseInt(HOUR)< 10 && HOUR.toString().length < 2)
        strHOUR = "0" + HOUR;
    else
        strHOUR=HOUR;
    if(parseInt(MINUTES)< 10 && MINUTES.toString().length < 2)
        strMINUTES = "0" + MINUTES;
    else
        strMINUTES=MINUTES;
    if(parseInt(SECONDS)< 10 && SECONDS.toString().length < 2)
        strSECONDS = "0" + SECONDS;
    else
        strSECONDS=SECONDS;

    switch (formatString){
        case "hh:mm:ss":
            return strHOUR + ':' + strMINUTES + ':' + strSECONDS;
        break;
        //More cases to meet your requirements.
    }
}

Haben Sie Sekunden zu einem Date-Objekt versucht, indem?

var dt = new Date();
dt.addSeconds(1234);

Ein Beispiel: https://jsfiddle.net/j5g2p0dc/5/

Aktualisiert: Beispiellink fehlte, damit ich einen neuen erstellt.

Hier ist eine Funktion Sekunden hh-mm-ss-Format zu konvertieren, basierend auf powtac Antwort hier

jsfiddle

/** 
 * Convert seconds to hh-mm-ss format.
 * @param {number} totalSeconds - the total seconds to convert to hh- mm-ss
**/
var SecondsTohhmmss = function(totalSeconds) {
  var hours   = Math.floor(totalSeconds / 3600);
  var minutes = Math.floor((totalSeconds - (hours * 3600)) / 60);
  var seconds = totalSeconds - (hours * 3600) - (minutes * 60);

  // round seconds
  seconds = Math.round(seconds * 100) / 100

  var result = (hours < 10 ? "0" + hours : hours);
      result += "-" + (minutes < 10 ? "0" + minutes : minutes);
      result += "-" + (seconds  < 10 ? "0" + seconds : seconds);
  return result;
}

Beispiel für die Verwendung

var seconds = SecondsTohhmmss(70);
console.log(seconds);
// logs 00-01-10

Nachdem auf allen Antworten suchen und nicht glücklich zu sein mit den meisten von ihnen, das ist, was ich kam mit. Ich weiß, ich bin sehr spät, um das Gespräch, aber hier ist es trotzdem.

function secsToTime(secs){
  var time = new Date(); 
  // create Date object and set to today's date and time
  time.setHours(parseInt(secs/3600) % 24);
  time.setMinutes(parseInt(secs/60) % 60);
  time.setSeconds(parseInt(secs%60));
  time = time.toTimeString().split(" ")[0];
  // time.toString() = "HH:mm:ss GMT-0800 (PST)"
  // time.toString().split(" ") = ["HH:mm:ss", "GMT-0800", "(PST)"]
  // time.toTimeString().split(" ")[0]; = "HH:mm:ss"
  return time;
}

Ich erstelle ein neues Date-Objekt, um die Zeit zu meiner Parameter ändern, konvertieren Sie das Date-Objekt zu einer Zeit, Zeichenfolge und entfernt den zusätzlichen Sachen durch die Zeichenfolge Splitting und Rückkehr nur der Teil, der Notwendigkeit.

Ich dachte, ich würde diesen Ansatz teilen, da es die Notwendigkeit für regex, Logik und Mathematik Akrobatik entfernt die Ergebnisse zu bekommen „HH: mm: ss“ Format und stattdessen stützt sie sich auf in Methoden gebaut

.

Sie möchten hier auf die Dokumentation einen Blick nehmen:

In einer Zeile, mit T. J. Crowder-Lösung:

secToHHMMSS = seconds => `${Math.floor(seconds / 3600)}:${Math.floor((seconds % 3600) / 60)}:${Math.floor((seconds % 3600) % 60)}`

In einer Zeile, eine andere Lösung, die auch Tage zählen:

secToDHHMMSS = seconds => `${parseInt(seconds / 86400)}d ${new Date(seconds * 1000).toISOString().substr(11, 8)}`

Quelle: https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276

var sec_to_hms = function(sec){
var min, hours;
     sec = sec - (min = Math.floor(sec/60))*60;
     min = min - (hours = Math.floor(min/60))*60;
     return (hours?hours+':':'') + ((min+'').padStart(2, '0')) + ':'+ ((sec+'').padStart(2, '0'));
}
alert(sec_to_hms(2442542));

Sie können auch unten Code verwenden:

int ss = nDur%60;
nDur   = nDur/60;
int mm = nDur%60;
int hh = nDur/60;

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

Ergebnis 15:08:03

Für jedermann mit AngularJS, eine einfache Lösung ist es, den Wert mit der date API , die auf dem gewünschten Format basiert Millisekunden in einen String umwandelt. Beispiel:

<div>Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}</div>

Beachten Sie, dass diese erwartet Millisekunden, so dass Sie von 1000 bis mehrfach timeRemaining möchten, wenn Sie von Sekunden konvertieren (wie die ursprüngliche Frage formuliert wurde).

Ich lief in dem Fall einige erwähnt haben, in dem die Anzahl der Sekunden länger als einen Tag ist. Hier ist eine angepasste Version von @Harish Anchus top-rated Antwort, die Konten für längere Zeit:

function secondsToTime(seconds) {
  const arr = new Date(seconds * 1000).toISOString().substr(11, 8).split(':');

  const days = Math.floor(seconds / 86400);
  arr[0] = parseInt(arr[0], 10) + days * 24;

  return arr.join(':');
}

Beispiel:

secondsToTime(101596) // outputs '28:13:16' as opposed to '04:13:16'
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;
}

Verwendungsbeispiel

alert("186".toHHMMSS());

Keine der Antworten hier erfüllt meine Anforderungen, wie ich handle in der Lage sein wollen,

  1. Eine große Anzahl von Sekunden (Tage) und
  2. Negative Zahlen

Obwohl die sind nicht von der OP erforderlich, es ist gute Praxis Deckelrand Fälle, vor allem, wenn es wenig Mühe.

Es ist ziemlich offensichtlich, dass die OP bedeutet eine Anzahl von Sekunden, wenn er sagt Sekunden . Warum sollte Ihre Funktion auf String peg?

function secondsToTimeSpan(seconds) {
    const value = Math.abs(seconds);
    const days = Math.floor(value / 1440);
    const hours = Math.floor((value - (days * 1440)) / 3600);
    const min = Math.floor((value - (days * 1440) - (hours * 3600)) / 60);
    const sec = value - (days * 1440) - (hours * 3600) - (min * 60);
    return `${seconds < 0 ? '-':''}${days > 0 ? days + '.':''}${hours < 10 ? '0' + hours:hours}:${min < 10 ? '0' + min:min}:${sec < 10 ? '0' + sec:sec}`
}
secondsToTimeSpan(0);       // => 00:00:00
secondsToTimeSpan(1);       // => 00:00:01
secondsToTimeSpan(1440);    // => 1.00:00:00
secondsToTimeSpan(-1440);   // => -1.00:00:00
secondsToTimeSpan(-1);      // => -00:00:01

Ich habe diesen Code verwendet, bevor ein einfaches Zeitspanne Objekt zu erstellen:

function TimeSpan(time) {
this.hours = 0;
this.minutes = 0;
this.seconds = 0;

while(time >= 3600)
{
    this.hours++;
    time -= 3600;
}

while(time >= 60)
{
    this.minutes++;
    time -= 60;
}

this.seconds = time;
}

var timespan = new Timespan(3662);

Vielleicht so etwas wie folgt aus:

var Convert = function (time) {
    const HOUR = 60 * 60;
    const MINUTE = 60;

    var minutesInSeconds = time % HOUR;
    var hours = Math.floor(time / HOUR);
    var minutes = Math.floor(minutesInSeconds / MINUTE)
    var seconds = minutesInSeconds % MINUTE;

    return hours.padStart(2, 0) + ':' + minutes.padStart(2, 0) + ':' + seconds.padStart(2, 0);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top