使用Moment.js获取序号

时间:2015-12-11 16:24:00

标签: momentjs

是否有可能通过Moment.js获得一个数字的序数?例如,如果我传入数字7并且Momentjs将返回'7th'

到目前为止,我已经尝试了所有这些,但没有一个工作

console.log(moment("12", "D Do")); // returns n {_isAMomentObject: true, _i: "12", _f: "D Do", _isUTC: false, _pf: Object…}
                console.log(moment("3", "D Do")); // returns n {_isAMomentObject: true, _i: "3", _f: "D Do", _isUTC: false, _pf: Object…}
                console.log(moment(3).format("D Do")); // returns '1 1st'
                console.log(moment('3').format("D Do")); // returns '1 1st'
                console.log(moment().day('3').format("Do")); // returns '9th'
                console.log(moment().day(3).format("D Do")); // returns '9 9th'
编辑:我应该提到我正在尝试处理日期。所以我得到的格式是DD-MM-YYYY格式。因此,如果日期是2015年12月7日,我想将其显示为第7个。

3 个答案:

答案 0 :(得分:8)

我不认为Moment.js提供这样的界面,因为它的用例非常有限。

如果您没有日期(例如排名),您可以使用以下内容:

function ordinal(number) {
  switch (number) {
    case 1:
    case 21:
      return number + 'st';
      break;
    case 2:
    case 22:
      return number + 'nd';
      break;
    case 3:
    case 23:
      return number + 'rd';
      break;
    default:
      return number + 'th';
  }
}

编辑:回答编辑过的问题:

您可以执行以下操作:

const date = '3-12-2015';
moment(date, 'DD-MM-YYYY').format('Do');

<强> Demo

<强>文档

解析:http://momentjs.com/docs/#/parsing/string-format/

展示:http://momentjs.com/docs/#/displaying/format/

答案 1 :(得分:7)

moment.localeData().ordinal(23)  

// 23rd

答案 2 :(得分:5)

基于上面接受的答案,您可以避免将日期添加到任意日期,而只是这样做:

moment('3', 'DD').format('Do');

修改

正如评论中所指出的,上述答案将返回30以上任何数字的无效日期,因此包含31st的更稳定的解决方案将是:

moment(`2012-10-${day}`).format('Do')