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.2025Para 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
Leer también
Pruebas en Go: unit, integration, e2e a nivel avanzado
Salarios de desarrolladores Java en Rusia: panorama del mercado 2024
Caché avanzado en C#: Redis, Memcached y soluciones integradas
Cobertura de código en Rust: de cero a confianza
Por qué Google inserta while(1); en JSON y cómo no caer en la trampa
Blogs
Book Recommendations
Leer también
Salarios de desarrolladores Java en Rusia: panorama del mercado 2024