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

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

Ответы [ 33 ]

2 голосов
/ 05 декабря 2017

Есть много вариантов решения этой проблемы, и, очевидно, есть хороший вариант, который предлагается, но я хочу добавить еще один оптимизированный код здесь

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

если вы не хотите форматировать ноль с числом меньше 10, вы можете использовать

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

}

Пример кода http://fiddly.org/1c476/1

2 голосов
/ 24 апреля 2018

В одну строку, используя T.J. Решение Краудера:

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

В одной строке другое решение, которое также считает дни:

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

Источник: https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276

1 голос
/ 15 декабря 2014

Для тех, кто использует AngularJS, простое решение состоит в том, чтобы отфильтровать значение с помощью API даты , который преобразует миллисекунды в строку на основе запрошенного формата. Пример:

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

Обратите внимание, что для этого требуются миллисекунды, поэтому вы можете захотеть умножить timeRemaining на 1000, если вы переводите из секунд (как было сформулировано в оригинальном вопросе).

1 голос
/ 28 сентября 2018

Я столкнулся с случаем, когда некоторые упоминали, что количество секунд больше дня. Вот адаптированная версия ответа @Harish Anchu с самым высоким рейтингом, который учитывает более длительные периоды времени:

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

Пример:

secondsToTime(101596) // outputs '28:13:16' as opposed to '04:13:16'
1 голос
/ 13 ноября 2012

Вы также можете использовать следующий код:

int ss = nDur%60;
nDur   = nDur/60;
int mm = nDur%60;
int hh = nDur/60;
1 голос
/ 17 марта 2019
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;
}

Пример использования

alert("186".toHHMMSS());
0 голосов
/ 24 августа 2009

Я использовал этот код раньше, чтобы создать простой объект timepan:

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);
0 голосов
/ 10 мая 2018

Использование Moment.js :

moment().format('hh:mm:ss');
0 голосов
/ 12 апреля 2012

Вы также можете использовать Сахар .

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

Этот пример возвращает '03: 00 '.

0 голосов
/ 13 января 2019

Может быть, что-то вроде этого:

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