Lección 40: Fechas (Date)
🧠 Concepto
Section titled “🧠 Concepto”El objeto Date de JavaScript permite trabajar con fechas y horas. Representa un momento en el tiempo con precisión de milisegundos.
Crear fechas
Section titled “Crear fechas”// Fecha actualconst ahora = new Date();console.log(ahora); // Fecha y hora actual
// A partir de stringconst fecha1 = new Date('2024-12-25');console.log(fecha1); // Wed Dec 25 2024
// Año, mes (0-indexado), día, hora, minuto, segundo, msconst fecha2 = new Date(2024, 11, 25, 10, 30, 0); // 25 Dic 2024 10:30console.log(fecha2);
// Timestamp (milisegundos desde 1/1/1970)const fecha3 = new Date(1700000000000);Métodos de obtención
Section titled “Métodos de obtención”const fecha = new Date('2024-12-25T10:30:45');
console.log(fecha.getFullYear()); // 2024console.log(fecha.getMonth()); // 11 (diciembre = 11, enero = 0)console.log(fecha.getDate()); // 25console.log(fecha.getDay()); // 3 (miércoles, 0=domingo)console.log(fecha.getHours()); // 10console.log(fecha.getMinutes()); // 30console.log(fecha.getSeconds()); // 45console.log(fecha.getMilliseconds()); // 0console.log(fecha.getTime()); // timestamp en msFormateo local
Section titled “Formateo local”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"💻 Ejemplo
Section titled “💻 Ejemplo”// Calcular edadfunction 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 fechasfunction 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 actualconsole.log(Date.now()); // milisegundos desde 1970⚠️ Nota
Section titled “⚠️ Nota”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"📝 Ejercicio
Section titled “📝 Ejercicio”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"