Используя библиотеку Moment, каков правильный синтаксис для преобразования минут в дни, часы и минуты, которые также форматируются для единственного и множественного числа?

Любая помощь приветствуется. Я изо всех сил пытался найти решение для этого вопроса:

  1. Используя библиотеку Moment, каков правильный синтаксис для преобразования минут в дни, часы и минуты, которые также форматируют для единственного и множественного числа?

ожидается: 2009 minutes станет: 1 day 9 hours 29 minutes

вот неправильный код:

function durationFormatter(minutes): string {
  const ms = minutes * 60000;
  const days = Math.floor(ms / 8.64e7);
  const msOnLastDay = ms - days * 8.64e7;

  return moment.utc(msOnLastDay)
    .format("D [days] H [hours] M [minutes]");
}

console.log('durationFormatter -->', durationFormatter(2009));

Вышеуказанные результаты:

1 days 9 hours 1 minutes что не так

Я также попробовал этот другой пакет моментов moment-duration-format с таким синтаксисом: (per docs = https://github.com/jsmreese/moment-duration-format#basics)

import momentDurationFormatSetup from 'moment-duration-format';

function durationFormatter(minutes): string {
  momentDurationFormatSetup();
  return moment.duration(minutes, "minutes").format();
}

Но я получаю эту ошибку: Свойство «формат» не существует для типа «Длительность».

Как бы я использовал это с пакетом?


person Crystal    schedule 04.12.2020    source источник
comment
Вы действительно должны смотреть на продолжительность вместо миллисекунд с 1970 года: momentjs. com/docs/#/длительность. Метод humanize уже может быть достаточно близок к вашей цели.   -  person deceze♦    schedule 04.12.2020
comment
Сначала я использовал продолжительность, но это не сработало, если формат не был распознан - просто обновил вопрос   -  person Crystal    schedule 04.12.2020
comment
Продолжительность не имеет метода format. Прочтите документацию. Опять же, humanize может быть достаточно близко.   -  person deceze♦    schedule 04.12.2020
comment
Я посмотрю, но документация, которую я просматривал, содержала это =› github.com /jsmreese/moment-duration-format#basics   -  person Crystal    schedule 04.12.2020
comment
Для пакета формата момента-длительности вы, похоже, упускаете важный шаг по правильной настройке этого расширения.   -  person deceze♦    schedule 04.12.2020
comment
Итак, глядя на Humanize = moment.duration(1, минуты).humanize(); // минута .....Мне нужно было бы выводить --› 1 минута, а не минута   -  person Crystal    schedule 04.12.2020


Ответы (1)


Вы можете использовать отличную библиотеку humanizeDuration, просто передав:

humanizeDuration(2009 * 60 * 1000, { delimiter: ' '})

выведет то, что вы хотели - 1 день 9 часов 29 минут.

Примечание. Вы передаете миллисекунды, поэтому вам нужно умножить параметр минут на 60 000, прежде чем переходить к humanizeDuration.

person Moshezauros    schedule 04.12.2020
comment
Проверяем сейчас! Спасибо за ваш вклад. - person Crystal; 04.12.2020
comment
Красиво получилось! Действительно прямолинейно. Спасибо. - person Crystal; 04.12.2020