代码之家  ›  专栏  ›  技术社区  ›  Hannoun Yassir

用javascript将秒转换为hh-mm-ss?

  •  175
  • Hannoun Yassir  · 技术社区  · 15 年前

    如何将秒转换为 HH-MM-SS 使用javascript的字符串?

    31 回复  |  直到 5 年前
        1
  •  99
  •   Rapptz    11 年前

    你不知道吗 datejs ?这是必须知道的。

    使用datejs,只需编写如下内容:

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

    ——更新

    现在,date.js已经过时,没有维护,所以使用” Moment.js “,这比T.J.克劳德指出的要好得多。

        2
  •  287
  •   fivestones Mario Campa    7 年前

    在javascript日期方法的帮助下,您可以在不使用任何外部javascript库的情况下做到这一点,如下所示:

    var date = new Date(null);
    date.setSeconds(SECONDS); // specify value for SECONDS here
    var result = date.toISOString().substr(11, 8);
    
        3
  •  114
  •   T.J. Crowder    6 年前

    我认为标准日期对象的任何内置功能都不会以比自己计算更方便的方式为您实现这一点。

    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);
        4
  •  29
  •   Community Egal    7 年前

    克莱顿在书中指出 his answer , moment.js 可用于:

    moment().startOf('day')
            .seconds(15457)
            .format('H:mm:ss');
    
        5
  •  20
  •   Santiago Hernández    8 年前

    我知道这有点老,但是…

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

    它将输出:

    toHHMMSS(13545) // 03:45:45
    toHHMMSS(180) // 03:00
    toHHMMSS(18) // 00:18
    
        6
  •  19
  •   Dima L.    11 年前
    function formatSeconds(seconds)
    {
        var date = new Date(1970,0,1);
        date.setSeconds(seconds);
        return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
    }
    
        7
  •  15
  •   Waggers    15 年前

    这就是诀窍:

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

    来源于 here )

        8
  •  9
  •   Strong Bear    9 年前

    试试这个:

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

    我们可以使这个函数更短、更清晰,但是这样会降低可读性,所以我们将尽可能简单和稳定地编写它。

    或者你可以检查这个工作 here :

        10
  •  6
  •   Mustafa Burak Kalkan    9 年前

    这是数字类的扩展。to hh mm ss()将秒转换为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
    <div id="timespan"></div>
        11
  •  5
  •   Chris Klingler    9 年前

    简单易懂的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);
    
        12
  •  4
  •   John Slegers    7 年前

    此函数应执行以下操作:

    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
    

    也见 this Fiddle .

        13
  •  4
  •   tsizzle    7 年前

    插入这个旧线程——操作声明hh:mm:ss,并且许多解决方案都可以工作,直到您意识到您需要超过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"
    

    …我试图让它尽可能少地使用代码,以实现一个好的单行方法。

        14
  •  4
  •   Faruque Ahamed Mollick    7 年前

    下面是将秒转换为hh-mm-ss格式的给定代码:

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

    从中获取替代方法 Convert seconds to HH-MM-SS format in JavaScript

        15
  •  3
  •   bgosalci    13 年前
    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.
        }
    }
    
        16
  •  3
  •   Daniel Viglione    8 年前

    我只是想解释一下上面的好答案:

    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
    
        17
  •  3
  •   kpull1    6 年前

    是否尝试向日期对象添加秒数?

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

    样品: https://jsfiddle.net/j5g2p0dc/5/

    更新时间: 缺少示例链接,所以我创建了一个新链接。

        18
  •  2
  •   Community Egal    7 年前

    下面是一个函数,根据powtac的答案将秒转换为hh-mm-s s格式 here

    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
    
        19
  •  2
  •   luis.madrigal    8 年前

    在看了所有的答案后,对大多数答案都不满意,这就是我想出来的。我知道我谈得很晚,但不管怎样,还是到了。

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

    我创建了一个新的日期对象,将时间更改为我的参数,将日期对象转换为时间字符串,并通过拆分字符串并只返回所需的部分来删除其他内容。

    我想我会分享这种方法,因为它消除了对regex、逻辑和数学杂技以“hh:mm:ss”格式获得结果的需要,相反它依赖于内置方法。

    您可能需要查看以下文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

        20
  •  2
  •   Amit    6 年前

    有很多解决这个问题的方法,很明显有很多建议,但是我想在这里再添加一个优化的代码。

    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

        21
  •  2
  •   KaKi87    6 年前

    在一行中,使用T.J.Crowder的解决方案:

    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

        22
  •  2
  •   user40521    6 年前
    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));
    
        23
  •  1
  •   Madhu S. Kapoor    11 年前

    您还可以使用以下代码:

    int ss = nDur%60;
    nDur   = nDur/60;
    int mm = nDur%60;
    int hh = nDur/60;
    
        24
  •  1
  •   Henrik Christensen    9 年前

    对于任何使用AngularJS的用户,一个简单的解决方案是使用 date API ,它根据请求的格式将毫秒转换为字符串。例子:

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

    请注意,这需要毫秒,因此,如果您要从秒转换为秒,您可能需要将剩余时间乘以1000(正如最初的问题所表述的那样)。

        25
  •  0
  •   smack0007    15 年前

    我以前用过这段代码来创建一个简单的时间跨度对象:

    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);
    
        26
  •  0
  •   Artem Kyba    11 年前

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

    结果 15:08:03

        27
  •  0
  •   ericgio    6 年前

    我遇到了一些人提到的情况,其中秒数超过一天。以下是@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'
    
        28
  •  0
  •   Ziv Ben-Or    5 年前

    可能是这样的:

    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);
    }
    
        29
  •  -1
  •   Kris Khaira nathanvda    9 年前

    您也可以使用 Sugar .

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

    此示例返回“03:00”。

        30
  •  -1
  •   Sai Ram    8 年前

    使用momentjs进行单日计算

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