ane*_*ane 9 javascript momentjs
鉴于UTC格式中的两个日期,我想执行以下操作:
var start = "2014-01-13T06:00:00.0000000Z";
var end = "2014-01-13T14:16:04.0000000Z";
Run Code Online (Sandbox Code Playgroud)
我希望得到这两次之间经过的确切时间跨度,例如
8h 16m
Run Code Online (Sandbox Code Playgroud)
我尝试过使用以下内容:
var duration = moment(moment(end) - moment(start)).format('hh[h] mm[m]');
Run Code Online (Sandbox Code Playgroud)
但这不适用于几天.此外,它几天都不起作用,因为即使<24小时过去它们总是> = 1.
我也尝试了twix.js来获取长度,但它的格式不支持创建上面指定的格式,或者我在文档中找不到这样做的方法.基本上我正在寻找一个确切的版本twix.humanizeLength()
.
Moment.js的a.diff(b)
只提供总的持续时间,它可以给我时间跨度以分钟,小时或天数的长短,但使用不余计算.
我目前的解决方案是使用diff
创建范围,然后使用modulo来计算余数,但这不是很优雅:
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 ' : '');
Run Code Online (Sandbox Code Playgroud)
问题:在moment.js或twix.js中有没有更明智的方法可以做到这一点,或者我应该花时间开发自己的moment.js插件?
小智 5
您可以尝试使用“持续时间”,但是我不确定它们是否具有您正在寻找的功能http://momentjs.com/docs/#/durations/
此外,您始终可以使用用户的diff差异来获取毫秒级差异,然后将其格式化为您的需求。基本上和您所做的相同,但是只调用一次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");
}
Run Code Online (Sandbox Code Playgroud)
moment.js 中有一个用于格式化持续时间的插件:moment-duration-format
如果它不能满足您的需要,那么您应该扩展moment.duration.fn
. 如果您不支持很多语言环境,那么这应该很容易。
无论如何,我建议阅读此功能请求的线程。
归档时间: |
|
查看次数: |
19470 次 |
最近记录: |