mva*_*een 182 javascript momentjs
有什么办法可以在持续时间对象上使用moment.js format方法吗?我在文档中的任何地方都找不到它,并且它看起来不是持续时间对象的属性.
我希望能够做到这样的事情:
var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')
Run Code Online (Sandbox Code Playgroud)
此外,如果有任何其他库可以轻松容纳这种功能,我会对reccomendations感兴趣.
谢谢!
Dav*_*ass 150
// set up
let start = moment("2018-05-16 12:00:00"); // some random moment in time (in ms)
let end = moment("2018-05-16 12:22:00"); // some random moment after start (in ms)
let diff = end.diff(start);
// execution
let f = moment.utc(diff).format("HH:mm:ss.SSS");
alert(f);
Run Code Online (Sandbox Code Playgroud)
tim*_*ood 52
我们正在研究在moment.js中为持续时间添加某种格式.请参阅https://github.com/timrwood/moment/issues/463
其他一些可能有用的库是http://countdownjs.org/和https://github.com/icambron/twix.js
Sag*_*fek 52
将持续时间转换为ms然后转换为时刻:
moment.utc(duration.as('milliseconds')).format('HH:mm:ss')
Run Code Online (Sandbox Code Playgroud)
kay*_*yz1 41
使用此插件时刻持续时间格式.
例:
moment.duration(123, "minutes").format("h:mm");
Run Code Online (Sandbox Code Playgroud)
Eri*_*oia 14
var diff = moment(end).unix() - moment(start).unix();
moment.utc(moment.duration(diff).asMilliseconds()).format("HH:mm:ss.SSS");
Run Code Online (Sandbox Code Playgroud)
Tae*_*Joe 10
我的特定用例的最佳方案是:
var duration = moment.duration("09:30"),
formatted = moment.utc(duration.asMilliseconds()).format("HH:mm");
Run Code Online (Sandbox Code Playgroud)
这改进了@Wilson的答案,因为它不访问私有内部属性_data.
使用以下代码行:
moment.utc(moment.duration(4500, "seconds").asMilliseconds()).format("HH:mm:ss")
Run Code Online (Sandbox Code Playgroud)
小智 8
我用:
var duration = moment.duration("09:30");
var str = moment(duration._data).format("HH:mm");
Run Code Online (Sandbox Code Playgroud)
我在var str得到了"09:30".
你不需要.format.使用这样的持续时间:
const duration = moment.duration(83, 'seconds');
console.log(duration.minutes() + ':' +duration.seconds());
// output: 1:23
Run Code Online (Sandbox Code Playgroud)
我在这里找到了这个解决方案:https://github.com/moment/moment/issues/463
编辑:
填充秒,分钟和小时:
const withPadding = (duration) => {
if (duration.asDays() > 0) {
return 'at least one day';
} else {
return [
('0' + duration.hours()).slice(-2),
('0' + duration.minutes()).slice(-2),
('0' + duration.seconds()).slice(-2),
].join(':')
}
}
withPadding(moment.duration(83, 'seconds'))
// 00:01:23
withPadding(moment.duration(6048000, 'seconds'))
// at least one day
Run Code Online (Sandbox Code Playgroud)
小智 8
我需要这样做是为了工作,因为需要以这种格式显示小时数。起初我试过这个。
moment.utc(totalMilliseconds).format("HH:mm:ss")
Run Code Online (Sandbox Code Playgroud)
然而,任何超过 24 小时和小时重置为 0。但分钟和秒是准确的。所以我只在分钟和秒内使用了那部分。
var minutesSeconds = moment.utc(totalMilliseconds).format("mm:ss")
Run Code Online (Sandbox Code Playgroud)
现在我只需要总小时数。
var hours = moment.duration(totalMilliseconds).asHours().toFixed()
Run Code Online (Sandbox Code Playgroud)
为了获得我们都想要的格式,我们只需将它粘合在一起。
var formatted = hours + ":" + minutesSeconds
Run Code Online (Sandbox Code Playgroud)
如果totalMilliseconds是894600000这将返回249:30:00。
希望有所帮助。在评论中留下任何问题。;)
如果差异是片刻
var diff = moment(20111031) - moment(20111010);
var formated1 = moment(diff).format("hh:mm:ss");
console.log("format 1: "+formated1);
Run Code Online (Sandbox Code Playgroud)
如果您愿意使用不同的javascript库,则numbers.js可以格式化秒,如下所示(示例为1000秒):
var string = numeral(1000).format('00:00');
// '00:16:40'
Run Code Online (Sandbox Code Playgroud)
小智 5
在这些情况下我使用经典格式函数:
var diff = moment(end).unix() - moment(start).unix();
//use unix function instead of difference
moment.unix(diff).format('hh:mm:ss')
Run Code Online (Sandbox Code Playgroud)
这是一个黑客,因为时间差异被视为标准时刻日期,一个早期的纪元日期时间,但它与我们的目标无关,你不需要任何插件
如果必须显示所有小时数(超过 24 小时)并且不需要小时前的“0”,则可以使用一小行代码完成格式化:
Math.floor(duration.as('h')) + moment.utc(duration.as('ms')).format(':mm:ss')
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
简短版本(单行):
moment.duration(durationInMs).asHours()|0||"00" + ":" + moment.utc(durationInMs).format("mm:ss")
Run Code Online (Sandbox Code Playgroud)
扩大的视野:
export const formatDuration = (durationInMs) => {
const hours = Math.floor(moment.duration(durationInMs).asHours()) || "00"
return hours + ":" + moment.utc(durationInMs).format("mm:ss")
}
Run Code Online (Sandbox Code Playgroud)
案例示例: