Trabajo con fechas y horas en JavaScript: guía completa para Node.js

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con fechas y horas en JavaScript (Node.js): desde lo básico hasta técnicas avanzadas



Trabajar con fechas y horas es una de las tareas más comunes en el desarrollo backend. Ya sea para registro de eventos, cálculo de plazos, generación de informes o trabajo con APIs, saber manejar correctamente las marcas de tiempo es una habilidad críticamente importante. En este artículo, analizaremos todos los aspectos clave del trabajo con fechas en el entorno Node.js: desde el objeto incorporado Date hasta bibliotecas populares que facilitan la vida del desarrollador.



1. El objeto incorporado Date: conceptos básicos y trampas



En JavaScript, el objeto incorporado Date se encarga del trabajo con fechas. Proporciona métodos básicos para crear, leer y manipular fechas. Sin embargo, tiene una serie de características que es importante conocer.



Creación de un objeto Date

La forma más sencilla de obtener la fecha y hora actuales:

const now = new Date();console.log(now); // 2025-03-20T14:30:00.000Z (ejemplo)


Se puede crear una fecha a partir de una cadena, un timestamp (milisegundos desde el 1 de enero de 1970) o especificando los componentes manualmente:

// Desde una cadena (ISO 8601)const dateFromString = new Date("2025-12-25T10:00:00Z");

// Desde un timestampconst dateFromTimestamp = new Date(1735048800000);

// Desde componentes (año, mes (0-11), día, hora, minuto, segundo, milisegundo)const dateFromParts = new Date(2025, 11, 25, 10, 0, 0, 0); // 25 de diciembre de 2025 10:00:00console.log(dateFromParts); // 2025-12-25T07:00:00.000Z (depende de la zona horaria)


Importante: Los meses en JavaScript se numeran desde 0 (enero es 0, diciembre es 11). Esta es una causa frecuente de errores.



Obtención de componentes de fecha

El objeto Date proporciona métodos para obtener componentes individuales:

const date = new Date();console.log(date.getFullYear());    // 2025console.log(date.getMonth());       // 2 (marzo, ya que la cuenta comienza en 0)console.log(date.getDate());        // 20console.log(date.getDay());         // 4 (jueves, 0 - domingo)console.log(date.getHours());       // 17console.log(date.getMinutes());     // 45console.log(date.getSeconds());     // 12console.log(date.getMilliseconds());// 345console.log(date.getTime());        // 1742474712345 (timestamp)


Tenga en cuenta: todos estos métodos devuelven valores en la zona horaria local del servidor. Para trabajar con UTC, use los métodos con el prefijo getUTC... (por ejemplo, getUTCFullYear()).



Manipulación de fechas

El cambio de fecha se realiza mediante los métodos set. Estos mutan el objeto original:

const date = new Date();date.setFullYear(2026);date.setMonth(0); // enerodate.setDate(15);console.log(date); // 2026-01-15T... (los demás componentes se conservan)


Trampa: Los métodos set corrigen automáticamente la fecha. Por ejemplo, si se establece el 32 de enero, la fecha se convierte en el 1 de febrero. Esto puede ser tanto conveniente como inesperado.



2. Formateo de fechas y salida en el formato deseado



El método incorporado toLocaleDateString() permite mostrar la fecha en el formato aceptado en una configuración regional determinada:

const date = new Date(2025, 11, 25);console.log(date.toLocaleDateString('ru-RU')); // 25.12.2025console.log(date.toLocaleDateString('en-US')); // 12/25/2025console.log(date.toLocaleDateString('de-DE')); // 25.12.2025


Para un formateo más flexible, se puede usar Intl.DateTimeFormat:

const formatter = new Intl.DateTimeFormat('ru-RU', {  year: 'numeric',  month: 'long',  day: 'numeric',  weekday: 'long',  hour: '2-digit',  minute: '2-digit'});console.log(formatter.format(new Date())); // "jueves, 20 de marzo de 2025, 17:45"


Sin embargo, para formatos complejos (por ejemplo, "2025-03-20T14:30:00+03:00") o plantillas personalizadas, es mejor usar bibliotecas (más sobre esto a continuación).



Blogs

Book Recommendations