¿Qué es Moment.js?

Moment.js es una biblioteca de JavaScript muy utilizada para analizar, validar, manipular y formatear fechas. Antes de que surgieran alternativas modernas, Moment.js era el estándar de facto para el manejo de fechas en aplicaciones JavaScript. Proporciona una API limpia y encadenable que hace que trabajar con fechas sea intuitivo y directo. Aunque existen bibliotecas más nuevas como date-fns y Luxon, Moment.js sigue siendo ampliamente usado en bases de código heredadas y aún se mantiene activamente para correcciones de errores. Comprender Moment.js es esencial para los desarrolladores que trabajan con proyectos existentes que dependen de ella.

¿Por qué usar una biblioteca de manipulación de fechas?

El objeto nativo Date de JavaScript es notoriamente difícil de manejar. Tiene un comportamiento inconsistente entre navegadores, un índice de meses confuso (0‑11 en lugar de 1‑12), opciones de formato limitadas y no incluye soporte de zona horaria. Bibliotecas de fechas como Moment.js resuelven estos problemas al ofrecer una API consistente y bien documentada. Gestionan casos extremos como transiciones de horario de verano, años bisiestos y formatos específicos de locale automáticamente, evitando que los desarrolladores tengan que escribir lógica de fechas propensa a errores desde cero.

Descripción de la herramienta

Moment.js Playground es un entorno interactivo basado en el navegador para experimentar con la biblioteca Moment.js. Escribe y ejecuta código JavaScript directamente en el editor con acceso completo a Moment.js y Moment Timezone. El playground ejecuta automáticamente tu código a medida que escribes (con debouncing) y muestra toda la salida de la consola en un panel estilo terminal debajo. Es perfecto para aprender Moment.js, probar cadenas de formato de fechas, depurar cálculos de fechas y crear prototipos de lógica relacionada con el tiempo sin configurar un entorno de desarrollo.

Ejemplos

Formatear la fecha actual:

const now = moment();
console.log(now.format("MMMM Do, YYYY"));
// Output: December 30th, 2025

console.log(now.format("dddd, h:mm A"));
// Output: Monday, 3:45 PM

Analizar diferentes formatos de fecha:

const date1 = moment("2025-12-25", "YYYY-MM-DD");
const date2 = moment("25/12/2025", "DD/MM/YYYY");
const date3 = moment("Dec 25, 2025", "MMM D, YYYY");

console.log(date1.format("dddd")); // Thursday
console.log(date2.isValid()); // true
console.log(date3.month()); // 11 (0-indexed)

Calcular tiempo relativo:

const past = moment().subtract(3, "days");
const future = moment().add(2, "weeks");

console.log(past.fromNow()); // 3 days ago
console.log(future.fromNow()); // in 14 days
console.log(past.from(future)); // 17 days ago

Aritmética de fechas:

const date = moment("2025-01-15");

const nextMonth = date.clone().add(1, "month");
const lastWeek = date.clone().subtract(1, "week");
const endOfMonth = date.clone().endOf("month");

console.log(nextMonth.format("YYYY-MM-DD")); // 2025-02-15
console.log(lastWeek.format("YYYY-MM-DD")); // 2025-01-08
console.log(endOfMonth.format("YYYY-MM-DD")); // 2025-01-31

Trabajar con duraciones:

const start = moment("2025-01-01");
const end = moment("2025-12-31");

const duration = moment.duration(end.diff(start));

console.log(duration.asDays() + " days"); // 364 days
console.log(duration.asWeeks() + " weeks"); // 52 weeks
console.log(duration.humanize()); // a year

Comparar fechas:

const date1 = moment("2025-06-15");
const date2 = moment("2025-12-25");

console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2)); // false
console.log(date1.isSame(date2, "year")); // true
console.log(date1.isBetween("2025-01-01", "2025-08-01")); // true

Trabajar con zonas horarias:

const now = moment();

console.log(now.tz("America/New_York").format("h:mm A z"));
console.log(now.tz("Europe/London").format("h:mm A z"));
console.log(now.tz("Asia/Tokyo").format("h:mm A z"));

Características

  • Biblioteca completa de Moment.js: Acceso a todas las funciones de Moment.js, incluyendo análisis, formato, manipulación y comparación
  • Soporte de zona horaria: Moment Timezone está pre‑cargado para trabajar con zonas horarias en todo el mundo
  • Ejecución de código en vivo: El código se ejecuta automáticamente mientras escribes, con debouncing inteligente
  • Terminal integrado: Visualiza la salida de la consola al instante sin abrir las herramientas de desarrollo del navegador
  • Resaltado de sintaxis: Resaltado de sintaxis JavaScript para mejorar la legibilidad del código
  • Manejo de errores: Los errores en tiempo de ejecución se muestran claramente en la salida del terminal

Casos de uso

  • Aprender Moment.js: Experimenta con la API y observa los resultados inmediatamente sin configurar un proyecto
  • Pruebas de cadenas de formato: Prueba diferentes tokens de formato para obtener la salida de fecha exacta que necesitas
  • Depuración de cálculos de fechas: Prueba aritmética de fechas compleja antes de implementarla en tu aplicación
  • Conversiones de zona horaria: Convierte rápidamente horas entre distintas zonas horarias
  • Mantenimiento de código heredado: Prueba fragmentos de código Moment.js al mantener aplicaciones existentes

Tokens de formato comunes

Token Descripción Ejemplo
YYYY Año de 4 dígitos 2025
YY Año de 2 dígitos 25
MM Mes de 2 dígitos 01‑12
MMM Nombre corto del mes Jan, Feb
MMMM Nombre completo del mes January
DD Día de 2 dígitos 01‑31
Do Día con ordinal 1st, 2nd, 3rd
dddd Nombre completo del día de la semana Monday
ddd Nombre corto del día Mon
HH Hora en formato 24 h 00‑23
hh Hora en formato 12 h 01‑12
mm Minutos 00‑59
ss Segundos 00‑59
A AM/PM (mayúsculas) AM, PM
a am/pm (minúsculas) am, pm
z Abreviatura de zona horaria EST, PST
Z Desplazamiento de zona horaria +05:00

Referencia de métodos comunes

Método Descripción Ejemplo
moment() Crear momento actual moment()
format(string) Formatear a cadena moment().format("YYYY-MM-DD")
add(n, unit) Añadir tiempo moment().add(7, "days")
subtract(n, unit) Restar tiempo moment().subtract(1, "month")
startOf(unit) Inicio de la unidad moment().startOf("week")
endOf(unit) Fin de la unidad moment().endOf("month")
fromNow() Tiempo relativo moment("2025-01-01").fromNow()
diff(moment) Diferencia momentA.diff(momentB, "days")
isBefore(moment) Es anterior momentA.isBefore(momentB)
isAfter(moment) Es posterior momentA.isAfter(momentB)
isSame(moment, unit) Es igual momentA.isSame(momentB, "month")
isValid() Verificar validez moment("invalid").isValid()
clone() Crear copia moment().clone()
tz(zone) Convertir zona horaria moment().tz("America/New_York")

Unidades de tiempo

Moment.js admite estas unidades de tiempo para operaciones add, subtract, startOf, endOf y diff:

  • years / y
  • quarters / Q
  • months / M
  • weeks / w
  • days / d
  • hours / h
  • minutes / m
  • seconds / s
  • milliseconds / ms