使用moment.js将秒持续时间格式化为DD:HH:mm格式

我正在尝试计算从秒到DD-HH-mm格式的持续时间

我的javascript代码:

var seconds = 120; var result = moment.utc(seconds*1000).format('DD:HH:mm'); 

我的代码应该返回这样的内容: 000002 (DD:HH:MM),但它返回: 010002 (DD:HH:MM)

我确定那是因为我当地的时间,但是如何确定一般的1小时间隔?

UPD:尝试moment.duration(seconds, 'seconds').format('DD:HH:mm');

UPD2:

var duration = moment.duration(seconds, 'seconds'); moment(duration.asMilliseconds()).format('DD:HH:mm');

moment.utc创建一个时区设置为GMT / UTC的moment.js对象。 在一段时间内使用日期时,您需要允许从1开始的日期,而不是零。 此外,如果持续时间为32天或更长,则“天数”将重置为1。

Moment.js也有持续时间 ,但是,除了“ 人性化 ”或转换为特定单位之外,它们不支持格式化。

如果您的持续时间少于32天,您可以使用从任何一年的1月1日开始的日期,前提是您处理的日期编号不是零索引(即从当天减去1)。

因此,使用moment.js获取所需的格式比仅仅格式化日期要多得多,您需要一系列步骤,因此请考虑编写函数。 在这种情况下,普通的JS函数不仅仅是一个工作,它将处理32天或更长的持续时间,并且不受夏令时和时区等日期变幻莫测的影响。

 var secs = 120; // Using a duration var m = moment.duration(secs * 1000); console.log(m); console.log(m.humanize()); console.log(m.asMinutes()); // Using a date and seconds value var x = moment.utc(secs*1000); // Generated date console.log(x.format()); // Get the days separately var dayNum = x.format('D') - 1; // Format with hours and minutes console.log(('0'+dayNum).slice(-2) + x.format(':HH:mm')) // Function using moment.js function myFormat(secs) { var x = moment.utc(secs*1000); var dayNum = x.format('D') - 1; return ('0'+dayNum).slice(-2) + x.format(':HH:mm'); } // Function without using a Date function duration(secs) { function z(n){return ('0'+n).slice(-2)} return z((secs/8.64e4|0)) + ':' + z((secs%8.64e4)/3.6e3|0) + ':' + z((secs%3.6e3)/60|0) // + ':' + z(secs%60); } console.log(duration(secs)); // Some other tests var min = 60; var hr = 60*min; // 3,600 var day = 24*hr; // 86,400 //2 days 17 hours 53 minutes and 08 seconds var d = 2*day + 17*hr + 53*min + 8; //0 days 1 hour 2 minutes and 1 second var e = 0*day + 1*hr + 2*min + 1; // 48 days 21 hours 15 minutes var f = 48*day + 21*hr + 15*min; [120, d, e, f].forEach(function(d) { console.log(d + ' seconds'); console.log('Plain js: ' + duration(d)); console.log('Moment fn: ' + myFormat(d)); });