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

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

Ответы [ 33 ]

5 голосов
/ 24 февраля 2015

Легкая версия для новичков:

 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);
4 голосов
/ 30 июня 2017

Включение в эту старую ветку - ОП указывал ЧЧ: ММ: СС, и многие решения работают, пока вы не поймете, что вам нужно более 24 часов в списке. И, может быть, вы не хотите больше, чем одну строку кода. Вот, пожалуйста:

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

Возвращает H +: MM: SS. Чтобы использовать это, просто используйте:

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

... Я пытался заставить его использовать наименьшее количество кода для хорошего однострочного подхода.

4 голосов
/ 19 июля 2017

ниже приведен код, который преобразует секунды в формат чч-мм-сс:

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

Получить альтернативный метод из Конвертировать секунды в формат HH-MM-SS в JavaScript

4 голосов
/ 07 февраля 2017

Эта функция должна делать это:

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

Не передавая разделитель, он использует : в качестве (по умолчанию) разделителя:

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

Если вы хотите использовать - в качестве разделителя, просто передайте его как второй параметр:

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

См. Также эту скрипку .

4 голосов
/ 19 июля 2016

Я просто хотел дать небольшое объяснение хорошему ответу выше:

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

Во второй строке, поскольку в 1 часе 3600 секунд, мы делим общее количество секунд на 3600, чтобы получить общее количество часов. Мы используем parseInt для удаления любого десятичного числа. Если totalSec был 12600 (3 с половиной часа), то parseInt (totalSec / 3600) вернул бы 3, так как у нас будет 3 полных часа. Зачем нам нужен% 24 в этом случае? Если мы превышаем 24 часа, скажем, у нас есть 25 часов (90000 секунд), то по модулю здесь мы снова вернемся к 1, а не к 25. Это ограничивает результат в пределах 24-часового лимита, так как есть 24 часа В течение одного дня.

Когда вы видите что-то вроде этого:

25 % 24

Думайте об этом так:

25 mod 24 or what is the remainder when we divide 25 by 24
3 голосов
/ 24 мая 2011
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.
    }
}
3 голосов
/ 31 марта 2014

Вы пытались добавить секунды к объекту Date?

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

образец: https://jsfiddle.net/j5g2p0dc/5/

Обновлен: Образец ссылки отсутствует, поэтому я создал новую.

2 голосов
/ 15 января 2016

Посмотрев на все ответы и не обрадовавшись большинству из них, я пришел к этому. Я знаю, что очень опаздываю к разговору, но здесь все равно.

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

Я создаю новый объект Date, изменяю время на мои параметры, преобразую объект Date в строку времени и удаляю дополнительные элементы, разбивая строку и возвращая только ту часть, которая требуется.

Я подумал, что поделюсь этим подходом, так как он устраняет необходимость в регулярных выражениях, логике и математической акробатике для получения результатов в формате "ЧЧ: мм: сс", и вместо этого он использует встроенные методы.

Вы можете посмотреть документацию здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

2 голосов
/ 28 января 2015

Вот функция для преобразования секунд в формат чч-мм-сс на основе ответа Powtac здесь

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

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

var seconds = SecondsTohhmmss(70);
console.log(seconds);
// logs 00-01-10
2 голосов
/ 10 августа 2018
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));
...