npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

ordinales-js

v2.3.2

Published

Librería para convertir números cardinales a ordinales en español. Spanish ordinal numbers library with gender and apocope support.

Readme

ordinales-js

Ordinales


CI Version License Downloads Node Bundle size Sin dependencias TypeScript Tipos Changelog

Convierte números cardinales a ordinales en español, con soporte de género, apócope y abreviaturas tipográficas RAE.

Spanish ordinal numbers library with gender, apocope and typographic abbreviation support.

Requisitos

  • Node.js 18 o superior

Instalación

npm install ordinales-js

Uso

Importación

// ES Modules
import { toOrdinal } from 'ordinales-js'
// CommonJS
const { toOrdinal } = require('ordinales-js')
// TypeScript — tipos incluidos sin @types/
import { toOrdinal } from 'ordinales-js'
import type { OrdinalOptions } from 'ordinales-js'

Ejemplos rápidos

/* Ordinales completos */
toOrdinal(1)                                          // 'primero'
toOrdinal(1, 'f')                                     // 'primera'
toOrdinal(21, { gender: 'f' })                        // 'vigésima primera'
toOrdinal(103, { apocope: true })                     // 'centésimo tercer'
toOrdinal(839)                                        // 'octingentésimo trigésimo noveno'
/* Ordinales abreviados */
toOrdinal(1, { format: 'abbr' })                      // '1.ᵒ'
toOrdinal(8, { format: 'abbr', gender: 'f' })         // '8.ᵃ'
toOrdinal(13, { format: 'abbr', apocope: true })      // '13.ᵉʳ'
toOrdinal(45, { format: 'abbr', abbrStyle: 'plain' }) // '45o'

API

toOrdinal(numero, opciones?)

El segundo parámetro acepta un string de género o un objeto de opciones.

| Forma | Ejemplo | |-------|---------| | toOrdinal(n) | género masculino por defecto | | toOrdinal(n, 'f') | género femenino | | toOrdinal(n, { gender, apocope, format, abbrDot, abbrStyle }) | objeto de opciones |

Opciones

| Opción | Tipo | Por defecto | Descripción | |--------|------|-------------|-------------| | gender | 'm' | 'f' | 'm' | Género del ordinal | | apocope | boolean | false | Aplica apócope (primeroprimer, tercerotercer) | | format | 'full' | 'abbr' | 'full' | 'abbr' devuelve la abreviatura tipográfica RAE con superíndice unicode | | abbrDot | boolean | true | Incluye el punto separador en 'abbr' (1.ᵒ vs 1ᵒ). Solo aplica cuando format: 'abbr' y abbrStyle: 'super' | | abbrStyle | 'super' | 'plain' | 'super' | 'plain' devuelve texto ASCII sin superíndices (1o, 1a, 1er). Útil para email o contextos sin soporte unicode completo |

Género

// Forma abreviada (string)
toOrdinal(1, 'm')              // 'primero'
toOrdinal(1, 'f')              // 'primera'

// Forma objeto
toOrdinal(1,  { gender: 'f' }) // 'primera'
toOrdinal(21, { gender: 'f' }) // 'vigésima primera'
toOrdinal(63, { gender: 'f' }) // 'sexagésima tercera'

Apócope

Se utiliza cuando el ordinal precede a un sustantivo masculino.

toOrdinal(1,  { apocope: true })             // 'primer'
toOrdinal(3,  { apocope: true })             // 'tercer'
toOrdinal(21, { apocope: true })             // 'vigésimo primer'

// Con género femenino explícito, el apócope no aplica
toOrdinal(1, { gender: 'f', apocope: true }) // 'primera'

Abreviatura tipográfica (format: 'abbr')

Devuelve la forma abreviada oficial RAE usando superíndices unicode (.ᵒ, .ᵃ, .ᵉʳ).

toOrdinal(1,  { format: 'abbr' })                // '1.ᵒ'
toOrdinal(1,  { gender: 'f', format: 'abbr' })   // '1.ᵃ'
toOrdinal(3,  { apocope: true, format: 'abbr' }) // '3.ᵉʳ'
toOrdinal(21, { gender: 'f', format: 'abbr' })   // '21.ᵃ'
toOrdinal(21, { apocope: true, format: 'abbr' }) // '21.ᵉʳ'

El punto separador sigue la norma RAE y está activo por defecto. Se puede omitir con abbrDot: false para contextos donde se prefiere la forma sin punto:

toOrdinal(1,  { format: 'abbr', abbrDot: false })                // '1ᵒ'
toOrdinal(1,  { gender: 'f', format: 'abbr', abbrDot: false })   // '1ᵃ'
toOrdinal(3,  { apocope: true, format: 'abbr', abbrDot: false }) // '3ᵉʳ'

Abreviatura en texto plano (abbrStyle: 'plain')

Devuelve la abreviatura sin superíndices unicode, en ASCII puro. Útil para email, hojas de cálculo o cualquier contexto donde los superíndices no se renderizan correctamente. abbrDot no tiene efecto en este modo.

toOrdinal(1,  { format: 'abbr', abbrStyle: 'plain' })                // '1o'
toOrdinal(1,  { gender: 'f', format: 'abbr', abbrStyle: 'plain' })   // '1a'
toOrdinal(3,  { apocope: true, format: 'abbr', abbrStyle: 'plain' }) // '3er'
toOrdinal(21, { format: 'abbr', abbrStyle: 'plain' })                // '21o'
toOrdinal(21, { apocope: true, format: 'abbr', abbrStyle: 'plain' }) // '21er'

Números grandes

toOrdinal(10000)                       // 'décimo milésimo'
toOrdinal(21000)                       // 'vigésimo primer milésimo'
toOrdinal(21000, 'f')                  // 'vigésima primera milésima'
toOrdinal(123456)                      // 'centésimo vigésimo tercer milésimo cuadrigentésimo quincuagésimo sexto'
toOrdinal(1000000)                     // 'millonésimo'
toOrdinal(2000000)                     // 'dosmillonésimo'
toOrdinal(21000000, { apocope: true }) // 'vigésimo primer millonésimo'

enhance()

Extiende el prototipo de Number para usar toOrdinal directamente sobre cualquier número.

// ES Modules
import { enhance } from 'ordinales-js'
// CommonJS
const { enhance } = require('ordinales-js')
enhance()

const n = 21
n.toOrdinal()                   // 'vigésimo primero'
n.toOrdinal('f')                // 'vigésima primera'
n.toOrdinal({ apocope: true })  // 'vigésimo primer'

Tipos TypeScript

El paquete incluye tipos nativos, sin necesidad de instalar @types/ordinales-js.

import type { OrdinalGender, OrdinalOptions, OrdinalFormat, OrdinalAbbrStyle } from 'ordinales-js'

const opciones: OrdinalOptions = { gender: 'f', apocope: true }
toOrdinal(21, opciones)           // 'vigésima primera'

const genero: OrdinalGender = 'f'
toOrdinal(3, genero)              // 'tercera'

const formato: OrdinalFormat = 'abbr'
toOrdinal(1, { format: formato }) // '1.ᵒ'

const estilo: OrdinalAbbrStyle = 'plain'
toOrdinal(1, { format: 'abbr', abbrStyle: estilo }) // '1o'

Casos de borde

| Llamada | Resultado | |---------|-----------| | toOrdinal(0) | '' (el cero no tiene ordinal en español) | | toOrdinal(-5) | '' (los negativos tampoco) | | toOrdinal(1.7) | 'primero' (los decimales se truncan con Math.trunc) | | toOrdinal(NaN) | lanza TypeError | | toOrdinal('foo') | lanza TypeError | | toOrdinal(null) | lanza TypeError | | toOrdinal(undefined) | lanza TypeError | | toOrdinal({ gender: 'f' }) | lanza TypeError (objeto recibido como número) |

Demo

npm run demo

Casos de uso

Cualquier interfaz que necesite expresar posiciones o rangos de forma escrita puede beneficiarse de esta librería.

En documentos legales y contratos notariales, los ordinales escritos son requisito formal: cláusulas como "el vigésimo primer día del mes" o referencias a artículos ("el tercero del presente contrato") requieren precisión lingüística y de género. La opción format: 'abbr' cubre además las abreviaturas tipográficas RAE habituales en encabezados de documentos (1.ᵒ, 2.ᵃ, 3.ᵉʳ).

En formularios web y aplicaciones de gestión es común presentar pasos de procesos, ediciones o versiones como ordinales ("paso primero", "segunda edición"). La API acepta género y apócope para adaptarse al sustantivo que acompaña al ordinal sin lógica adicional en el cliente.

En generadores de facturas e informes los ordinales aparecen en referencias de línea, secciones o trimestres: "primer trimestre", "segunda línea de pedido", "tercer concepto facturado". La abreviatura tipográfica (format: 'abbr') cubre encabezados de columna como 1.ᵒ, 2.ᵒ, 3.ᵒ, y abbrStyle: 'plain' permite exportar a formatos que no soportan superíndices unicode (Excel legacy, CSV, email).

En listados y rankings mostrados al usuario (clasificaciones, resultados paginados, posiciones en tablas) el femenino automático permite mostrar "primera posición" o "tercera participante" sin tablas de traducción adicionales.

Contribuir

  1. Haz un fork del repositorio
  2. Crea una rama para tu cambio: git checkout -b feat/mi-mejora
  3. Realiza tus cambios y añade tests si es necesario
  4. Asegúrate de que los tests pasan: npm test
  5. Abre una Pull Request describiendo el cambio

Changelog

Consulta CHANGELOG.md para el historial de versiones.

Licencia

MIT