格式Moment.js持续时间

时间:2015-05-22 11:32:02

标签: javascript momentjs

我正在使用Moment.js来跟踪应用中操作的持续时间。目前,我有以下代码:

var startMoment = null;

var actionClock = null;
function startClock() {
  actionClock = setInterval(function(){ 
    if (startMoment === null) {
      startMoment = moment();
      $('#duration').text('00:00:00');
    } else {
      var now = moment();
      var span = moment.duration(now - startMoment);
      $('#duration').text(span.minutes() + ':' + span.seconds() + '.' + span.milliseconds());
    }
  }, 1000);     
}

function stopClock() {          
  clearInterval(actionClock);

      var now = moment();
      var span = moment.duration(now - startMoment);
      $('#duration').text(span.minutes() + ':' + span.seconds() + '.' + span.milliseconds());

  startMoment = null;
  actionClock = null;
}

我的问题是,持续时间的格式很尴尬。我想将持续时间显示为mm:ss.lll。换句话说,总是显示分钟的两位数字,秒数的两位数字和毫秒数字的三位数字。目前,我看到的持续时间打印为1:2.45。如何格式化使用Moment.js创建的持续时间?如果这不可能,我是否应该使用另一个库来跟踪持续时间并显示它?

谢谢!

2 个答案:

答案 0 :(得分:4)

这样做的一种方法可能是将您的持续时间转换回片刻(可能使用毫秒),然后使用片刻的格式。

moment.utc(span.asMilliseconds()).format('mm:ss.SSS');

var startMoment = null,
  $durForm = $('#durationFormatted');

var actionClock = null;

function startClock() {
  actionClock = setInterval(function() {
    if (startMoment === null) {
      startMoment = moment();
      $('#duration').text('00:00:00');
      $durForm.text('00:00.000');
    } else {
      var now = moment();
      var span = moment.duration(now - startMoment);
      $('#duration').text(span.minutes() + ':' + span.seconds() + '.' + span.milliseconds());
      $durForm.text(moment(span.asMilliseconds()).format('mm:ss.SSS'));
    }
  }, 1000);
}

function stopClock() {
  clearInterval(actionClock);

  var now = moment();
  var span = moment.duration(now - startMoment);
  $('#duration').text(span.minutes() + ':' + span.seconds() + '.' + span.milliseconds());
  $durForm.text(moment(span.asMilliseconds()).format('mm:ss.SSS'));

  startMoment = null;
  actionClock = null;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.3/moment.min.js"></script>
<div>Duration (original): <span id='duration'></span>
</div>
<div>Formatted moment: <span id='durationFormatted'></span>
</div>
<button onClick='startClock()'>Start Clock</button>
<button onClick='stopClock()'>Stop Clock</button>

答案 1 :(得分:1)

我的项目中有类似的问题,谢天谢地,Lodash已经是一个依赖。我能够使用_.padStart方法到达那里。

let yourHours = _.padStart(span.hours().toString(),2,'0');
let yourMinute = _.padStart(span.minutes().toString(),2,'0');
let yourSeconds = _.padStart(span.seconds().toString(),2,'0');