Convertire i secondi in HH-MM-SS con JavaScript?

Come posso convertire i secondi in una stringa HH-MM-SS utilizzando JavaScript?

Non conosci datejs ? è un must.

Usando datejs, scrivi qualcosa come:

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

–aggiornare

Al giorno d’oggi date.js è obsoleto e non mantenuto, quindi usa ” Moment.js “, che è molto meglio come sottolineato da TJ Crowder.

Puoi farlo senza alcuna libreria JavaScript esterna con l’aiuto del metodo JavaScript Data come segue:

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

Non credo che nessuna caratteristica incorporata dell’object Date standard possa fare questo per te in un modo che è più conveniente di fare solo i calcoli tu stesso.

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

Come ha sottolineato Cleiton nella sua risposta , moment.js può essere usato per questo:

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

So che è abbastanza vecchio, ma …

ES2015:

 var toHHMMSS = (secs) => { var sec_num = parseInt(secs, 10) var hours = Math.floor(sec_num / 3600) % 24 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(":") } 

Produrrà:

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

Questo fa il trucco:

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

(Approvato da qui )

Prova questo:

 function toTimeString(seconds) { return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0]; } 
  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); var 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" 

possiamo rendere questa funzione molto più breve e nitida ma che riduce la leggibilità, quindi la scriveremo nel modo più semplice ansible e il più stabile ansible.

oppure puoi controllare qui lavorando qui :

Ecco un’estensione della class Number. toHHMMSS () converte i secondi in una stringa hh: mm: ss.

 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 

Versione facile da seguire per i 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); 

Questa funzione dovrebbe farlo:

 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 : ':' ); } 

Senza passare un separatore, utilizza : come separatore (predefinito):

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

Se si desidera utilizzare - come separatore, basta passarlo come secondo parametro:

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

Vedi anche questo Fiddle .

di seguito è riportato il codice che convertirà i secondi in formato hh-mm-ss:

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

Ottieni un metodo alternativo da Converti secondi in formato HH-MM-SS 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. } } 

Volevo solo dare una piccola spiegazione alla bella risposta sopra:

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

Sulla seconda riga, poiché ci sono 3600 secondi in 1 ora, dividiamo il numero totale di secondi di 3600 per ottenere il numero totale di ore. Usiamo parseInt per rimuovere qualsiasi decimale. Se totalSec era 12600 (3 ore e mezza), quindi parseInt (totalSec / 3600) restituirebbe 3, poiché avremo 3 ore complete. Perché abbiamo bisogno del% 24 in questo caso? Se superiamo le 24 ore, diciamo che abbiamo 25 ore (90000 secondi), quindi il modulo qui ci riporterà nuovamente su 1, anziché tornare indietro 25. Si limita il risultato entro un limite di 24 ore, poiché ci sono 24 ore in un giorno.

Quando vedi qualcosa del genere:

 25 % 24 

Pensalo in questo modo:

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

Insinuandosi in questo vecchio thread – il PO ha dichiarato HH: MM: SS, e molte delle soluzioni funzionano, fino a quando non ti rendi conto che hai bisogno di più di 24 ore elencate. E forse non vuoi più di una singola riga di codice. Ecco qui:

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

Restituisce H +: MM: SS. Per usarlo, usa semplicemente:

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

… Ho provato a farlo usare la minima quantità di codice ansible, per un buon approccio one-liner.

Ecco una funzione per convertire i secondi in formato hh-mm-ss in base alla risposta di powtac qui

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

Esempio di utilizzo

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

Dopo aver guardato tutte le risposte e non essere felice con la maggior parte di loro, questo è quello che mi è venuto in mente. So che sono molto in ritardo per la conversazione, ma qui è comunque.

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

Creo un nuovo object Date, cambio il tempo ai miei parametri, converto l’object Date in una stringa temporale e rimuovo il materiale aggiuntivo dividendo la stringa e restituendo solo la parte che necessita.

Ho pensato di condividere questo approccio, in quanto elimina la necessità di regex, logica e acrobazie matematiche per ottenere i risultati nel formato “HH: mm: ss”, e invece si basa su metodi incorporati.

Si consiglia di dare un’occhiata alla documentazione qui: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Ci sono molte opzioni per risolvere questo problema, ed è ovvio che ci sia una buona opzione suggerita, ma voglio aggiungere un altro codice ottimizzato qui

 function formatSeconds(sec) { return [(sec / 3600), ((sec % 3600) / 60), ((sec % 3600) % 60)] .map(v => v < 10 ? "0" + parseInt(v) : parseInt(v)) .filter((i, j) => i !== "00" || j > 0) .join(":"); } 

se non vuoi zero formattato con meno di 10 numeri, puoi usare

 function formatSeconds(sec) { return parseInt(sec / 3600) + ':' + parseInt((sec % 3600) / 60) + ':' + parseInt((sec % 3600) % 60); 

}

Codice di esempio http://fiddly.org/1c476/1

Hai provato ad aggiungere secondi a un object Date?

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

Un esempio: https://jsfiddle.net/j5g2p0dc/5/

Aggiornato: mancava il link di esempio, quindi ne ho creato uno nuovo.

Puoi anche utilizzare il seguente codice:

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

Per chiunque usi AngularJS, una soluzione semplice consiste nel filtrare il valore con l’ API data , che converte millisecondi in una stringa in base al formato richiesto. Esempio:

 
Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}

Nota che ci si aspetta millisecondi, quindi potresti voler moltiplicare timeRemaining per 1000 se stai convertendo da secondi (come è stata formulata la domanda originale).

In una riga, usando la soluzione di TJ Crowder:

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

In una riga, un’altra soluzione che conta anche giorni:

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

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

Ho usato questo codice prima per creare un semplice object temporale:

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

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

risultato 15:08:03

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

Puoi anche usare Sugar .

 Date.create().reset().set({seconds: 180}).format('{mm}:{ss}'); 

Questo esempio restituisce ’03: 00 ‘.

usando i momentjs per il calcolo individuale

 var number = 10000(milliseconds); var momentObject = moment.duration(number); var output = momentObject.hours()+"HH"+momentObject.minutes()+"MM"+minuteObject.seconds()+"S" 

Utilizzando Moment.js :

 moment().format('hh:mm:ss');