Skip to content

Lección 40: Fechas (Date)

El objeto Date de JavaScript permite trabajar con fechas y horas. Representa un momento en el tiempo con precisión de milisegundos.

// Fecha actual
const ahora = new Date();
console.log(ahora); // Fecha y hora actual
// A partir de string
const fecha1 = new Date('2024-12-25');
console.log(fecha1); // Wed Dec 25 2024
// Año, mes (0-indexado), día, hora, minuto, segundo, ms
const fecha2 = new Date(2024, 11, 25, 10, 30, 0); // 25 Dic 2024 10:30
console.log(fecha2);
// Timestamp (milisegundos desde 1/1/1970)
const fecha3 = new Date(1700000000000);
const fecha = new Date('2024-12-25T10:30:45');
console.log(fecha.getFullYear()); // 2024
console.log(fecha.getMonth()); // 11 (diciembre = 11, enero = 0)
console.log(fecha.getDate()); // 25
console.log(fecha.getDay()); // 3 (miércoles, 0=domingo)
console.log(fecha.getHours()); // 10
console.log(fecha.getMinutes()); // 30
console.log(fecha.getSeconds()); // 45
console.log(fecha.getMilliseconds()); // 0
console.log(fecha.getTime()); // timestamp en ms
const fecha = new Date('2024-12-25');
console.log(fecha.toLocaleDateString('es-ES')); // "25/12/2024"
console.log(fecha.toLocaleDateString('en-US')); // "12/25/2024"
console.log(fecha.toLocaleDateString('es-ES', {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
})); // "miércoles, 25 de diciembre de 2024"
console.log(fecha.toLocaleTimeString('es-ES')); // "0:00:00"
// Calcular edad
function calcularEdad(fechaNacimiento) {
const hoy = new Date();
const nacimiento = new Date(fechaNacimiento);
let edad = hoy.getFullYear() - nacimiento.getFullYear();
const mesActual = hoy.getMonth();
const mesNacimiento = nacimiento.getMonth();
if (mesActual < mesNacimiento ||
(mesActual === mesNacimiento && hoy.getDate() < nacimiento.getDate())) {
edad--;
}
return edad;
}
console.log(calcularEdad('1995-06-15')); // edad según fecha actual
// Días entre dos fechas
function diasEntre(fecha1, fecha2) {
const unDia = 1000 * 60 * 60 * 24;
const diff = Math.abs(fecha2.getTime() - fecha1.getTime());
return Math.round(diff / unDia);
}
const navidad = new Date('2024-12-25');
const añoNuevo = new Date('2025-01-01');
console.log(diasEntre(navidad, añoNuevo)); // 7
// Timestamp actual
console.log(Date.now()); // milisegundos desde 1970

Los meses en Date son 0-indexados: enero es 0, febrero es 1, …, diciembre es 11. Es uno de los errores más comunes.

El manejo de zonas horarias puede ser confuso. new Date('2024-01-01') se interpreta como UTC, mientras que new Date(2024, 0, 1) usa la zona horaria local.

Para operaciones complejas con fechas, considera usar librerías como date-fns o Day.js. El objeto Date nativo tiene limitaciones.

Usa toLocaleDateString() para mostrar fechas en formato amigable según el idioma del usuario. Usa Date.now() para medir tiempos de ejecución. Usa timestamps (milisegundos) para cálculos aritméticos con fechas.

Para obtener el nombre del mes en español:

const fecha = new Date();
const opciones = { month: 'long' };
console.log(fecha.toLocaleDateString('es-ES', opciones)); // "mayo"

Escribe una función diasHastaNavidad que calcule cuántos días faltan desde la fecha actual hasta el 25 de diciembre del año actual. Si ya pasó, calcular para el próximo año.

function diasHastaNavidad() {
// Tu código aquí
}
console.log(diasHastaNavidad()); // "Faltan X días hasta Navidad"