为了实现日期输入掩码,我需要根据格式部分找到文字日期部分。
我在Moment.js document搜索,但似乎没有做我想要达到的目标。
以下是我想要做的一个例子:
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);
我虽然可以使用短号(可见here)但是有些情况在没有变换的情况下不起作用(日期的简写是“d”,而格式是大写的“D”)。
你认为我能找到一个除了switch/case
之外的解决方案吗?
function getFormatName(format) {
switch(format[0]) {
case 'Y':
return 'years';
[...]
}
}
答案 0 :(得分: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' : '');
}
答案 1 :(得分:2)
这是一种方式。并且它与显示格式一致,因为它使用相同的内部别名:
function getFormatName(format) {
const unit = moment.normalizeUnits(format[0])
return unit ? unit + 's' : undefined;
}