Конвертировать секунды в HH-MM-SS с JavaScript? - PullRequest
191 голосов
/ 24 августа 2009

Как я могу преобразовать секунды в HH-MM-SS строку, используя JavaScript?

Ответы [ 33 ]

318 голосов
/ 13 августа 2014

Вы можете сделать это без какой-либо внешней библиотеки JavaScript с помощью метода JavaScript Date, например:

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

Или согласно комментарию @ Frank ; один вкладыш:

new Date(SECONDS * 1000).toISOString().substr(11, 8);
123 голосов
/ 24 августа 2009

Я не думаю, что какая-либо встроенная функция стандартного объекта Date сделает это для вас более удобным способом, чем простая математика.

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

Пример:

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);
103 голосов
/ 24 августа 2009

Разве вы не знаете datejs ? это надо знать.

Используя datejs, просто напишите что-то вроде:

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

- обновление

В настоящее время date.js устарел и не поддерживается, поэтому используйте « Moment.js », что гораздо лучше, как указал T.J. Crowder.

31 голосов
/ 18 октября 2013

Как указал Клитон в , его ответ , moment.js можно использовать для этого:

moment().startOf('day')
        .seconds(15457)
        .format('H:mm:ss');
26 голосов
/ 17 января 2016

Я знаю, что это довольно старо, но ...

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(":")
}

Будет выведено:

toHHMMSS(129600) // 36:00:00
toHHMMSS(13545) // 03:45:45
toHHMMSS(180) // 03:00
toHHMMSS(18) // 00:18
19 голосов
/ 22 июля 2013
function formatSeconds(seconds)
{
    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}
15 голосов
/ 24 августа 2009

Это делает трюк:

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

(Источник здесь )

10 голосов
/ 30 января 2014
     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"

мы можем сделать эту функцию намного короче и четче, но это снижает удобочитаемость, поэтому мы напишем ее настолько просто, насколько это возможно и максимально стабильно.

или вы можете проверить это рабочее здесь :

9 голосов
/ 14 апреля 2015

Попробуйте это:

function toTimeString(seconds) {
  return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}
6 голосов
/ 29 июня 2015

Вот расширение класса Number. toHHMMSS () преобразует секунды в строку чч: мм: сс.

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>
...