时刻 - 获取日期格式部分名称

时间:2018-04-23 08:19:06

标签: javascript date momentjs

为了实现日期输入掩码,我需要根据格式部分找到文字日期部分。

我在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';
    [...]
  }
}

2 个答案:

答案 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;
}