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

时间:2017-11-04 15:56:11

标签: javascript jquery date

我试图计算从秒到 DD-HH-mm格式的持续时间。

我的javascript代码:

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

我的代码应该返回如下内容: 00:00:02 (DD:HH:MM)但它返回: 01:00:02 (DD:HH:MM)

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

2 个答案:

答案 0 :(得分:0)

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

UPD2:

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

答案 1 :(得分:0)

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

Moment.js也有durations,但是,除了" humanize"之外,他们不支持格式化。或转换为特定单位。

如果您的持续时间少于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));
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>
&#13;
&#13;
&#13;

格式似乎含糊不清,我想很多人会把它解释为HH:mm:ss而不是DD:HH:mm。