Момент - получить название раздела формата даты

Чтобы реализовать маску ввода даты, мне нужно найти раздел буквальной даты на основе части формата.

Я искал в Документ Moment.js, но, похоже, ничего не помогает в том, чего я пытаюсь достичь.

Вот пример того, что я хотел бы сделать:

function getFormatName(format) {
  // [Use some moment.js' method or implement something manually...]
}

getFormatName('YYYY') // Return 'years'
getFormatName('MM') // Return 'months'
getFormatName('DD') // Return 'days'
getFormatName('HH') // Return 'hours'
getFormatName('hh') // Return 'hours'
getFormatName('mm') // Return 'minutes'
getFormatName('ss') // Return 'seconds'

Мне нужен этот метод для увеличения / уменьшения определенной части даты с add / substract, который принимает ключ ('годы', 'дни' и т. д.)

moment().add('years', 1);

Я думал, что могу использовать сокращения (видимый здесь), но некоторые случаи не будут работать без преобразований (сокращенное обозначение дней - «d», в то время как формат предоставляется с заглавной буквы «D»).

Как вы думаете, смогу ли я найти другое решение, кроме большого switch/case?

function getFormatName(format) {
  switch(format[0]) {
    case 'Y':
      return 'years';
    [...]
  }
}

d возвращает день недели, то есть от 0 до 6, но D возвращает день месяца.

Praveen Kumar 23.04.2018 10:24

Думаю, можно попробовать с объектом {Y: 'years'}. Будет лучше переключателя / корпуса

Tan Duong 23.04.2018 10:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не знаю, какую функцию имеет этот момент для этого, но это довольно просто с литералом объекта

getFormatName('YYYY') // Return 'years'
getFormatName('MM') // Return 'months'
getFormatName('DD') // Return 'days'
getFormatName('HH') // Return 'hours'
getFormatName('hh') // Return 'hours'
getFormatName('mm') // Return 'minutes'
getFormatName('ss') // Return 'seconds'

function getFormatName(s, plural = true) {
  let trans = {
    YYYY: 'year',
    MM: 'month',
    DD: 'day',
    HH: 'hour',
    hh: 'hour',
    mm: 'minute',
    ss: 'second'
  };
  if (! trans[s]) throw new Error('no translation found');
  return trans[s] + (plural ? 's' : '');
}

Хорошо, мне было интересно, есть ли в библиотеке функция, которая делает то же самое, но реализует это не имеет большого значения. Спасибо за помощь.

Thomas Ferro 23.04.2018 10:30
Ответ принят как подходящий

Вот один способ. И это согласуется с форматированием дисплея, поскольку он использует тот же внутренний псевдоним:

function getFormatName(format) {
    const unit = moment.normalizeUnits(format[0])
    return unit ? unit + 's' : undefined;
}  

Ах, милый, не знала этого

baao 23.04.2018 11:01

Другие вопросы по теме