如何使用 moment.js 将前导零添加到日期差异计算的结果中?

How to add leading zeros to the result of a date difference calculation, using moment.js?

moment.js 库的魅力之一是它处理有时一年有 366 天 ;-) 和不同长度的月份的完美方式。

所以我组装了以下代码:

<script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.3/moment.js' type='text/javascript'></script>
<script type="text/javascript">

Date.getFormattedDateDiff = function(date1, date2) {
  var b = moment(date1),
      a = moment(date2),
      intervals = ['years','months','weeks','days','hours','minutes','seconds'],
      out = [];

  for(var i=0; i<intervals.length; i++){
      var diff = a.diff(b, intervals[i]);
      b.add(diff, intervals[i]);
      out.push('<div>' + diff + ' ' + intervals[i] + '</div><br/>');
  }
  return out.join(' ');
};

window.onload = function calculateInterval() {
   var start = moment("2013-09-04"),
       end   = moment();

   document.getElementById('output').innerHTML  
     = 'Time elapsed between "' + start.toISOString().split('T')[0]
     + '" and "' + end.toISOString().split('T')[0] + '":<br/><br/>' 
     + Date.getFormattedDateDiff(start, end);
}
</script>

<p><label id="output"></label></p>

代码笔can be found here ...

您可能会立即注意到我遗漏了结果中的前导零。 我尝试了几种格式化工作。但不幸的是,它们似乎都不起作用。

任何有关如何在结果中获得前导零的建议,如 07 年而不是 7 年等,我们都非常感谢。

在您的情况下,您应该手动处理它,因为您输出的是原始数字。一种方法是使用方法 padStart

diff.toString().padStart(2, '0')

但这在旧版浏览器中不起作用,请参阅 https://caniuse.com/?search=padStart 了解浏览器支持。

你可以这样写

function getLeadingZeroNum(num) {
    return num < 10 ? '0' + num : num;
}

getLeadingZeroNum(4) // 04;

在前面加上 0 的简单 if 语句将起作用 -- typeof diff() 值 returns number 并且您需要转换为字符串才能进行操作。

Date.getFormattedDateDiff = function(date1, date2) {
  var b = moment(date1),
      a = moment(date2),
      intervals = ['years','months','weeks','days','hours','minutes','seconds'],
      out = [];

  for(var i=0; i<intervals.length; i++){
      var diff = a.diff(b, intervals[i]);
      b.add(diff, intervals[i]);
      if (diff.toString().length == 1) {
        diff = "0" + diff.toString();
      }
      out.push('<div>' + diff + ' ' + intervals[i] + '</div><br/>');
  }
  return out.join(' ');
};

window.onload = function calculateInterval() {
   var start = moment("2013-09-04"),
       end   = moment();

   document.getElementById('output').innerHTML  
     = 'Time elapsed between "' + start.toISOString().split('T')[0]
     + '" and "' + end.toISOString().split('T')[0] + '":<br/><br/>' 
     + Date.getFormattedDateDiff(start, end);
}

你也可以参考this thread一些神奇的前导0方法