如何添加前导零到日期差异计算的结果,使用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>

codependency可以在这里找到…

可能您会立即注意到我在结果中丢失了前导零。我已经尝试了几种格式化方法。但不幸的是,它们似乎都不起作用。

任何关于如何在结果中获得前导零的建议,因此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;

简单的if语句前置0将工作-typeofdiff()值返回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);
}

你也可以参考这个线程的一些奇妙的前导0方法。

最新更新