2017-02-06 3 views
1

Использование Moment.js конвертировать миллисекунды длительности:Использование moment.js, Как я могу упростить продолжительность до самой упрощенной формы?

moment.duration(dur)

, а затем выходной строкой: moment.duration(dur).toISOString()

возвращает это: PT15336H1S

Очевидно 15336 часов не очень полезный номер на время.

Я нашел обходной путь, чтобы сделать это что: moment.duration(moment.duration(d)._data).toISOString()

С duration._data возвращает объект JSON этой точной упрощенной форме, передать его обратно в конструктор делает правильно возвращает строку, я хочу. пример:

var d = 55209601000; //milliseconds 
var initialDuration = moment.duration(d) 
console.log(initialDuration._data); 
//{ 
// days:30, 
// hours:0, 
// milliseconds:0, 
// minutes:0, 
// months:8, 
// seconds:1, 
// years:1 
//} 
console.log(initialDuration.toISOString()); 
// "PT15336H1S" 

var newDuration = moment.duration(initialDuration._data); 
console.log(newDuration.toISOString()); 
// "P1Y8M30DT1S" 

Так, очевидно, этот метод работает, но он чувствует себя невероятно Hacky. Наверняка есть функция moment.js или более чистый способ сделать это?

+0

«Очевидно, что 15336 часов не очень полезно для продолжительности». Что вы пытаетесь сделать здесь? toISOString возвращает строку, совместимую с ISO8601, которая не требует, чтобы часы/минуты/и т. д. не переносили https://en.wikipedia.org/wiki/ISO_8601#Durations – Nick

ответ

0

Это отверстие (imho) в momentjs. Даже используя humanize() по вашей длительности даст не совсем конкретный 2 years.

Существует более подробно в этих двух вопросах GitHub:

  1. https://github.com/moment/moment/issues/463

  2. https://github.com/moment/moment/issues/1048

Похоже, что общественное мнение просто установить и использовать этот плагин:

https://github.com/jsmreese/moment-duration-format