Ordinal Number Formatting
Turn integers into 1st, 2nd, 3rd and 11th using Intl.PluralRules ordinal categories with a safe fallback.
Code
const EN_ORDINAL_SUFFIX = { one: "st", two: "nd", few: "rd", other: "th" };
export function formatOrdinal(value, locale = "en") {
if (!Number.isInteger(value)) throw new TypeError("value must be an integer");
const rules = new Intl.PluralRules(locale, { type: "ordinal" });
const suffix = locale.toLowerCase().startsWith("en")
? EN_ORDINAL_SUFFIX[rules.select(Math.abs(value))]
: "";
return suffix
? String(value) + suffix
: new Intl.NumberFormat(locale).format(value);
}
export function formatOrdinalList(values, locale = "en") {
if (!Array.isArray(values)) throw new TypeError("values must be an array");
return values.map((value) => formatOrdinal(value, locale));
}Report a problem with this exampleOpens a pre-filled issue on GitHub.