我试图计算从秒到 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小时间隔?
答案 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;
格式似乎含糊不清,我想很多人会把它解释为HH:mm:ss而不是DD:HH:mm。