在javascript中的毫秒时间

Mat*_*iby 51 javascript jquery

我有这个函数,它可以按时间格式化

 function secondsToTime(secs){
    var hours = Math.floor(secs / (60 * 60));
    var divisor_for_minutes = secs % (60 * 60);
    var minutes = Math.floor(divisor_for_minutes / 60);
    var divisor_for_seconds = divisor_for_minutes % 60;
    var seconds = Math.ceil(divisor_for_seconds);
    return minutes + ":" + seconds; 
}
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但我需要一个函数来转换毫秒到时间我似乎无法理解我需要做什么来这个函数以这种格式返回时间

mm:ss.mill
01:28.5568
Run Code Online (Sandbox Code Playgroud)

Rob*_*obG 90

在其他答案中有很多不必要的地板.如果字符串以毫秒为单位,则转换为h:m:s,如下所示:

function msToTime(s) {
  var ms = s % 1000;
  s = (s - ms) / 1000;
  var secs = s % 60;
  s = (s - secs) / 60;
  var mins = s % 60;
  var hrs = (s - mins) / 60;

  return hrs + ':' + mins + ':' + secs + '.' + ms;
}
Run Code Online (Sandbox Code Playgroud)

如果你想格式化为hh:mm:ss.sss然后使用:

function msToTime(s) {

  // Pad to 2 or 3 digits, default is 2
  function pad(n, z) {
    z = z || 2;
    return ('00' + n).slice(-z);
  }

  var ms = s % 1000;
  s = (s - ms) / 1000;
  var secs = s % 60;
  s = (s - secs) / 60;
  var mins = s % 60;
  var hrs = (s - mins) / 60;

  return pad(hrs) + ':' + pad(mins) + ':' + pad(secs) + '.' + pad(ms, 3);
}

console.log(msToTime(55018))
Run Code Online (Sandbox Code Playgroud)

使用最近添加的一些语言功能,pad功能可以更简洁:

function msToTime(s) {
    // Pad to 2 or 3 digits, default is 2
  var pad = (n, z = 2) => ('00' + n).slice(-z);
  return pad(s/3.6e6|0) + ':' + pad((s%3.6e6)/6e4 | 0) + ':' + pad((s%6e4)/1000|0) + '.' + pad(s%1000, 3);
}

// Current hh:mm:ss.sss UTC
console.log(msToTime(new Date() % 8.64e7))
Run Code Online (Sandbox Code Playgroud)


Vis*_*ioN 39

不要重新发明轮子,这是我最喜欢的单线解决方案:

/**
 * Convert milliseconds to time string (hh:mm:ss:mss).
 *
 * @param Number ms
 *
 * @return String
 */
function time(ms) {
    return new Date(ms).toISOString().slice(11, -1);
}

console.log( time(12345 * 1000) );  // "03:25:45.000"
Run Code Online (Sandbox Code Playgroud)

Method Date.prototype.toISOString()以简化的扩展ISO格式(ISO 8601)返回一个字符串,该字符串总是24个字符:YYYY-MM-DDTHH:mm:ss.sssZ.所有现代浏览器(IE9 +)和JavaScript引擎都支持此方法.


更新:上面的解决方案总是限制在一天的范围内,如果您使用它来格式化毫秒长达24小时(即ms < 86400000),这是很好的.为了使它能够处理任何输入值,我将它扩展为一个很好的通用原型方法:

/**
 * Convert (milli)seconds to time string (hh:mm:ss[:mss]).
 *
 * @param Boolean isSec
 *
 * @return String
 */
Number.prototype.toTime = function(isSec) {
    var ms = isSec ? this * 1e3 : this,
        lm = ~(4 * !!isSec),  /* limit fraction */
        fmt = new Date(ms).toISOString().slice(11, lm);

    if (ms >= 8.64e7) {  /* >= 24 hours */
        var parts = fmt.split(/:(?=\d{2}:)/);
        parts[0] -= -24 * (ms / 8.64e7 | 0);
        return parts.join(':');
    }

    return fmt;
};

console.log( (12345 * 1000).toTime()     );  // "03:25:45.000"
console.log( (123456 * 789).toTime()     );  // "27:03:26.784"
console.log(  12345.       .toTime(true) );  // "03:25:45"
console.log(  123456789.   .toTime(true) );  // "34293:33:09"
Run Code Online (Sandbox Code Playgroud)

  • 这应该是现在接受的答案. (3认同)

Ric*_*III 17

function millisecondsToTime(milli)
{
      var milliseconds = milli % 1000;
      var seconds = Math.floor((milli / 1000) % 60);
      var minutes = Math.floor((milli / (60 * 1000)) % 60);

      return minutes + ":" + seconds + "." + milliseconds;
}
Run Code Online (Sandbox Code Playgroud)

  • 使用'Math.floor`******和**分钟**可能是一个好主意. (2认同)

sis*_*onb 10

为什么不像这样使用Date对象?

let getTime = (milli) => {
  let time = new Date(milli);
  let hours = time.getUTCHours();
  let minutes = time.getUTCMinutes();
  let seconds = time.getUTCSeconds();
  let milliseconds = time.getUTCMilliseconds();
  return hours + ":" + minutes + ":" + seconds + ":" + milliseconds;
}
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/4sdkpso7/6/