我是否能够在持续时间对象上使用 moment.js 的 format
方法?我在文档中没有找到它的任何信息,并且似乎也不是持续时间对象的属性。
我想要做这样的事情:
var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')
另外,如果有其他能够轻松实现此类功能的库,我会对推荐很感兴趣。
谢谢!
我是否能够在持续时间对象上使用 moment.js 的 format
方法?我在文档中没有找到它的任何信息,并且似乎也不是持续时间对象的属性。
我想要做这样的事情:
var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')
另外,如果有其他能够轻松实现此类功能的库,我会对推荐很感兴趣。
谢谢!
var diff = moment(20111031) - moment(20111010);
var formated1 = moment(diff).format("hh:mm:ss");
console.log("format 1: "+formated1);
moment()
构造函数需要一个Unix时间戳,因此无论您传递什么参数,它都将被假定为距离1970年1月1日的特定时间间隔。 - ken如果需要显示超过24小时的所有时间,并且不需要在小时前添加‘0’,则可以使用一行简短的代码进行格式化:
Math.floor(duration.as('h')) + moment.utc(duration.as('ms')).format(':mm:ss')
moment.duration(val,'seconds').humanize()
。 - user1944491mm
和 ss
的小时是最好的方式,因为它紧凑且类似于逗号分隔值,因此非常适合进行视觉比较。 - o.v简短版本(一行版):
moment.duration(durationInMs).asHours()|0||"00" + ":" + moment.utc(durationInMs).format("mm:ss")
扩展版本:
export const formatDuration = (durationInMs) => {
const hours = Math.floor(moment.duration(durationInMs).asHours()) || "00"
return hours + ":" + moment.utc(durationInMs).format("mm:ss")
}
示例案例:
var string = numeral(1000).format('00:00');
// '00:16:40'
meassurements = ["years", "months", "weeks", "days", "hours", "minutes", "seconds"];
withPadding = (duration) => {
var step = null;
return meassurements.map((m) => duration[m]()).filter((n,i,a) => {
var nonEmpty = Boolean(n);
if (nonEmpty || step || i >= a.length - 2) {
step = true;
}
return step;
}).map((n) => ('0' + n).slice(-2)).join(':')
}
duration1 = moment.duration(1, 'seconds');
duration2 = moment.duration(7200, 'seconds');
duration3 = moment.duration(604800, 'seconds');
withPadding(duration1); // 00:01
withPadding(duration2); // 02:00:00
withPadding(duration3); // 01:07:00:00:00
在这些情况下,我使用经典的格式化函数:
var diff = moment(end).unix() - moment(start).unix();
//use unix function instead of difference
moment.unix(diff).format('hh:mm:ss')
将moment持续时间格式化为字符串
var duration = moment.duration(86400000); //value in milliseconds
var hours = duration.hours();
var minutes = duration.minutes();
var seconds = duration.seconds();
var milliseconds = duration.milliseconds();
var date = moment().hours(hours).minutes(minutes).seconds(seconds).millisecond(milliseconds);
if (is12hr){
return date.format("hh:mm:ss a");
}else{
return date.format("HH:mm:ss");
}
如何正确使用moment.js时间间隔(durations)? | 在代码中使用moment.duration()
首先,您需要导入moment
和moment-duration-format
。
import moment from 'moment';
import 'moment-duration-format';
接下来,使用时间长度函数。让我们运用上面的例子:28800 = 上午8点。
moment.duration(28800, "seconds").format("h:mm a");
好的,你没有上述类型错误。你得到了一个正确的值 8:00 am 吗?不是... 你得到的值是 8:00 a。Moment.js 格式化没有像预期的那样工作。
解决方案是将秒转换为毫秒并使用 UTC 时间。
moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')
现在是早上8点。如果您想使用“8”而不是“8:00 am”表示整点时间,我们需要使用正则表达式。
const time = moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a');
time.replace(/:00/g, '')
我的解决方案不涉及任何其他库,而且它适用于时间差大于24小时的情况。
var momentInSeconds = moment.duration(n,'seconds')
console.log(("0" + Math.floor(momentInSeconds.asHours())).slice(-2) + ':' + ("0" + momentInSeconds.minutes()).slice(-2) + ':' + ("0" + momentInSeconds.seconds()).slice(-2))
如果您使用 Angular,请将以下内容添加到您的过滤器中:
.filter('durationFormat', function () {
return function (value) {
var days = Math.floor(value/86400000);
value = value%86400000;
var hours = Math.floor(value/3600000);
value = value%3600000;
var minutes = Math.floor(value/60000);
value = value%60000;
var seconds = Math.floor(value/1000);
return (days? days + ' days ': '') + (hours? hours + ' hours ': '') + (minutes? minutes + ' minutes ': '') + (seconds? seconds + ' seconds ': '')
}
})
使用示例
<div> {{diff | durationFormat}} </div>
HH:mm:ss
会给出00:00:23
。所以只是小时部分的大小写错误。 - goldenratiomoment.duration(diff_ms).humanize();
- Rafe