Как я могу использовать формат () на мгновение.Яш продолжительность?
есть ли способ я могу использовать момент.jsformat метод на объектах длительности? Я не могу найти его нигде в документах, и он не рассматривается как атрибут объектов длительности.
Я хотел бы иметь возможность сделать что-то вроде:
var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')
кроме того, если есть какие-либо другие библиотеки, которые могут легко разместить такую функциональность, я был бы заинтересован в рекомендациях.
спасибо!
15 ответов:
мы рассматриваем возможность добавления какого-то форматирования к длительности в данный момент.js. См.https://github.com/timrwood/moment/issues/463
несколько других библиотек, которые могут помочь http://countdownjs.org/ и https://github.com/icambron/twix.js
// 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);
преобразование длительности в мс, а затем в момент:
moment.utc(duration.as('milliseconds')).format('HH:mm:ss')
использовать этот плагин Формат Длительности Момента.
пример:
moment.duration(123, "minutes").format("h:mm");
var diff = moment(end).unix() - moment(start).unix(); moment.utc(moment.duration(diff).asMilliseconds()).format("HH:mm:ss.SSS");
Я использую:
var duration = moment.duration("09:30"); var str = moment(duration._data).format("HH:mm");и я получаю "09: 30" в var str.
лучший сценарий для моего конкретного случая использования:
var duration = moment.duration("09:30"), formatted = moment.utc(duration.asMilliseconds()).format("HH:mm");это улучшает ответ @Wilson, так как он не имеет доступа к частному внутреннему свойству _data.
Если вы хотите использовать другую библиотеку javascript,цифра.js можно форматировать секунды следующим образом (например, для 1000 секунд):
var string = numeral(1000).format('00:00'); // '00:16:40'
Я использую классическую функцию форматирования в этих случаях:
var diff = moment(end).unix() - moment(start).unix(); //use unix function instead of difference moment.unix(diff).format('hh:mm:ss')это хак, потому что разница во времени рассматривается как стандартная дата момента, раннее время даты эпохи, но это не имеет значения для нашей цели, и вам не нужен плагин
вам не нужны .формат. Используйте продолжительность, как это:
const duration = moment.duration(83, 'seconds'); console.log(duration.minutes() + ':' +duration.seconds()); // output: 1:23Я нашел это решение здесь: https://github.com/moment/moment/issues/463
если diff-это момент
var diff = moment(20111031) - moment(20111010); var formated1 = moment(diff).format("hh:mm:ss"); console.log("format 1: "+formated1);
чтобы отформатировать длительность момента в строку
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"); }
Если вы используете 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>
Как насчет собственного javascript?
var formatTime = function(integer) { if(integer < 10) { return "0" + integer; } else { return integer; } } function getDuration(ms) { var s1 = Math.floor(ms/1000); var s2 = s1%60; var m1 = Math.floor(s1/60); var m2 = m1%60; var h1 = Math.floor(m1/60); var string = formatTime(h1) +":" + formatTime(m2) + ":" + formatTime(s2); return string; }
Если все часы должны отображаться (более 24) и если' 0 ' перед часами не требуется, то форматирование можно выполнить с помощью короткой строки кода:
Math.floor(duration.as('h')) + moment.utc(duration.as('ms')).format(':mm:ss')
Comments