Skip to content

Instantly share code, notes, and snippets.

@parisminton
Created December 14, 2012 01:16

Revisions

  1. parisminton created this gist Dec 14, 2012.
    63 changes: 63 additions & 0 deletions convertToOrdinal.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,63 @@
    function convertToOrdinal (i, zero_based) {
    var number = zero_based ? ((i - 0) + 1) : (i - 0), // bootleg coercion
    one = /\d+1$/,
    two = /\d+2$/,
    three = /\d+3$/,
    zero_and_four_through_nine = /\d+[0456789]$/;

    // For whatever goofy reason, typeof NaN == 'number'
    if (typeof number == 'number' && !isNaN(number)) {
    if (number == 0) {
    console.log('Error: Argument cannot be zero - Zero can\'t be converted to a ranking.');
    }
    else if (number == 1) {
    return 'first';
    }
    else if (number > 1 && number < 10) {
    if (number == 2) {
    return 'second';
    }
    if (number == 3) {
    return 'third';
    }
    if (number == 4) {
    return 'fourth';
    }
    if (number == 5) {
    return 'fifth';
    }
    if (number == 6) {
    return 'sixth';
    }
    if (number == 7) {
    return 'seventh';
    }
    if (number == 8) {
    return 'eighth';
    }
    if (number == 9) {
    return 'ninth';
    }
    }
    else if (number >= 10 && number < 20) {
    return number + 'th';
    }
    else {
    if (one.test(number)) {
    return number + 'st';
    }
    if (two.test(number)) {
    return number + 'nd';
    }
    if (three.test(number)) {
    return number + 'rd';
    }
    if (zero_and_four_through_nine.test(number)) {
    return number + 'th';
    }
    }
    }
    else {
    console.log('Error: Argument is not a number or cannot be converted to a number.');
    }
    }