Как я могу использовать формат () на мгновение.Яш продолжительность?



есть ли способ я могу использовать момент.jsformat метод на объектах длительности? Я не могу найти его нигде в документах, и он не рассматривается как атрибут объектов длительности.



Я хотел бы иметь возможность сделать что-то вроде:



var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')


кроме того, если есть какие-либо другие библиотеки, которые могут легко разместить такую функциональность, я был бы заинтересован в рекомендациях.



спасибо!

473   15  

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);

взгляните на JSFiddle

преобразование длительности в мс, а затем в момент:

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

    Ничего не найдено.