JavaScript seconds to time string with format hh:mm:ss

前端 未结 30 1777
太阳男子
太阳男子 2020-11-22 07:19

I want to convert a duration of time, i.e., number of seconds to colon-separated time string (hh:mm:ss)

I found some useful answers here but they all talk about conv

30条回答
  •  孤城傲影
    2020-11-22 07:46

    I'm personally prefer the leading unit (days, hours, minutes) without leading zeros. But seconds should always be leaded by minutes (0:13), this presentation is easily considered as 'duration', without further explanation (marking as min, sec(s), etc.), usable in various languages (internationalization).

        // returns  (-)d.h:mm:ss(.f)
        //          (-)h:mm:ss(.f)
        //          (-)m:ss(.f)
        function formatSeconds (value, fracDigits) {
            var isNegative = false;
            if (isNaN(value)) {
                return value;
            } else if (value < 0) {
                isNegative = true;
                value = Math.abs(value);
            }
            var days = Math.floor(value / 86400);
            value %= 86400;
            var hours = Math.floor(value / 3600);
            value %= 3600;
            var minutes = Math.floor(value / 60);
            var seconds = (value % 60).toFixed(fracDigits || 0);
            if (seconds < 10) {
                seconds = '0' + seconds;
            }
    
            var res = hours ? (hours + ':' + ('0' + minutes).slice(-2) + ':' + seconds) : (minutes + ':' + seconds);
            if (days) {
                res = days + '.' + res;
            }
            return (isNegative ? ('-' + res) : res);
        }
    

    //imitating the server side (.net, C#) duration formatting like:

        public static string Format(this TimeSpan interval)
        {
            string pattern;
            if (interval.Days > 0)          pattern = @"d\.h\:mm\:ss";
            else if (interval.Hours > 0)    pattern = @"h\:mm\:ss";
            else                            pattern = @"m\:ss";
            return string.Format("{0}", interval.ToString(pattern));
        }
    

提交回复
热议问题