Чтобы реализовать маску ввода даты, мне нужно найти раздел буквальной даты на основе части формата.
Я искал в Документ 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';
[...]
}
}
Думаю, можно попробовать с объектом {Y: 'years'}. Будет лучше переключателя / корпуса



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я не знаю, какую функцию имеет этот момент для этого, но это довольно просто с литералом объекта
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' : '');
}Хорошо, мне было интересно, есть ли в библиотеке функция, которая делает то же самое, но реализует это не имеет большого значения. Спасибо за помощь.
Вот один способ. И это согласуется с форматированием дисплея, поскольку он использует тот же внутренний псевдоним:
function getFormatName(format) {
const unit = moment.normalizeUnits(format[0])
return unit ? unit + 's' : undefined;
}
Ах, милый, не знала этого
d возвращает день недели, то есть от 0 до 6, но D возвращает день месяца.