2014-02-10 112 views
8

我想做到以下几点,鉴于UTC格式两个日期:如何精确使用Moment.js格式化持续时间?

var start = "2014-01-13T06:00:00.0000000Z"; 
var end = "2014-01-13T14:16:04.0000000Z"; 

我希望得到确切时间跨度,这两个时刻之间穿过,如

8h 16m 

我已经尝试使用以下内容:

var duration = moment(moment(end) - moment(start)).format('hh[h] mm[m]'); 

但是这不适用于天。而且,它不适用于数天,因为即使经过24小时,它们总是> = 1。

我也试过twix.js以获得长度,但其格式不支持创建上面指定的格式,或者我找不到在其文档中这样做的方式。基本上我在寻找确切版本的twix.humanizeLength()

Moment.jsa.diff(b)只提供总的持续时间,它可以给我时间跨度以分钟,小时或天数的长短,但使用不余计算。

目前的解决方案是使用diff创建范围,然后使用模计算余,但这不是很优雅:

var days = moment(end).diff(start, 'days'); 
var hours = moment(end).diff(start, 'hours') % 24; 
var minutes = moment(end).diff(start, 'minutes') % 60; 

var duration = ((days > 0) ? days + 'd ' : '') + ((hours > 0) ? hours + 'h ' : '') + ((minutes > 0) ? minutes + 'm ' : ''); 

问题:有没有更聪明的办法请在moment.jstwix.js,或者我应该花些时间开发自己的moment.js插件?

回答

4

有在moment.js格式化时间插件:moment-duration-format

如果没有你需要的东西,那么你应该扩展moment.duration.fn。如果你不支持很多地区,它应该很容易。

在任何情况下,我都建议阅读此feature request的主题。

+0

我会看看功能请求会发生什么。目前,该插件做我想要的。 – ane

4

您可以尝试使用的持续时间,但我不知道如果这些有您正在寻找http://momentjs.com/docs/#/durations/

同样的功能,您可以随时用户时刻的差异来获得在毫秒之差,然后将其格式化为您需要。它与你所做的基本相同,但你只需要调用diff一次。

function convertMilliSecondsIntoLegibleString(milliSecondsIn) { 

    var secsIn = milliSecondsIn/1000; 
    var milliSecs = milliSecondsIn % 1000; 

    var hours = secsIn/3600, 
    remainder = secsIn % 3600, 
    minutes = remainder/60, 
    seconds = remainder % 60; 


    return (hours + "h: " 
      + minutes + "m: " 
      + seconds +"s: " + milliSecs + "ms"); 
} 
相关问题