1. Creación de Fechas: new Date()
JavaScript trabaja con fechas utilizando el objeto Date. Las fechas se calculan en milisegundos desde el 1 de enero de 1970 (época UNIX).
Existen 4 formas principales de instanciar una fecha:
a) Fecha Actual
const ahora = new Date();
console.log(ahora);
// Muestra la fecha y hora exacta del momento de ejecución
b) Desde un String (ISO Date)
Es la forma más recomendada y legible estándar.
const navidad = new Date("2025-12-25");
const fechaYHora = new Date("2025-12-25T14:30:00");
c) Desde parámetros numéricos
¡CUIDADO! Los meses en JavaScript van de 0 (Enero) a 11 (Diciembre).
// Año, Mes (0-11), Día, Hora, Min, Seg
const especifico = new Date(2025, 11, 25, 10, 30, 0);
// 11 es Diciembre
d) Desde Milisegundos
const origen = new Date(0); // 1 Enero 1970
2. Obtener Datos (Getters)
Una vez tienes un objeto fecha, puedes extraer sus componentes.
const fecha = new Date("2025-12-25T14:30:15");
console.log(fecha.getFullYear()); // 2025
console.log(fecha.getMonth()); // 11 (Ojo: 0=Ene, 11=Dic)
console.log(fecha.getDate()); // 25 (Día del mes)
console.log(fecha.getDay()); // 4 (Día de la semana: 0=Domingo... 4=Jueves... 6=Sábado)
console.log(fecha.getHours()); // 14
console.log(fecha.getMinutes()); // 30
console.log(fecha.getSeconds()); // 15
console.log(fecha.getMilliseconds()); // ms
console.log(fecha.getTime()); // 1766669415000 (Timestamp en ms desde 1970)
3. Matemáticas con Fechas
Como las fechas internamente son números (milisegundos), podemos restarlas para saber el tiempo transcurrido.
Diferencia entre dos fechas
const inicio = new Date("2025-01-01");
const fin = new Date("2025-01-15");
// La resta devuelve la diferencia en MILISEGUNDOS
const diferenciaMs = fin - inicio;
// Convertir ms a días:
// 1000 ms * 60 s * 60 m * 24 h = 86,400,000 ms en un día
const diasPasados = diferenciaMs / (1000 * 60 * 60 * 24);
console.log(diasPasados); // 14
Comparar Fechas
Para saber si una fecha es mayor o menor que otra, úsalas directamente en comparaciones.
if (fin > inicio) {
console.log("El fin es posterior al inicio");
}
/* NOTA IMPORTANTE:
Para saber si dos fechas son IGUALES, no sirve == ni === (son objetos distintos).
Debes comparar su valor numérico con .getTime() */
if (fecha1.getTime() === fecha2.getTime()) {
console.log("Son el mismo instante exacto");
}
4. Ejemplos Prácticos Reales
Ejemplo A: ¿Es Mayor de Edad?
function esMayorDeEdad(fechaNacimientoString) {
const nacido = new Date(fechaNacimientoString);
const hoy = new Date();
let edad = hoy.getFullYear() - nacido.getFullYear();
const mes = hoy.getMonth() - nacido.getMonth();
// Ajuste si aún no ha cumplido años en el mes/día actual
if (mes < 0 || (mes === 0 && hoy.getDate() < nacido.getDate())) {
edad--;
}
return edad >= 18;
}
console.log(esMayorDeEdad("2010-05-20")); // false (si hoy fuera 2026)
console.log(esMayorDeEdad("2000-01-01")); // true
Ejemplo B: Cuánto tiempo ha pasado (Formato Humano)
function tiempoTranscurrido(fechaPasada) {
const ahora = new Date();
const pasado = new Date(fechaPasada);
const diffMs = ahora - pasado;
const segundos = Math.floor(diffMs / 1000);
const minutos = Math.floor(segundos / 60);
const horas = Math.floor(minutos / 60);
const dias = Math.floor(horas / 24);
if (dias > 0) return `Hace ${dias} días`;
if (horas > 0) return `Hace ${horas} horas`;
if (minutos > 0) return `Hace ${minutos} minutos`;
return "Hace unos instantes";
}
console.log(tiempoTranscurrido("2026-02-10T10:00:00"));
🚨 Formatear Fechas (La forma fácil)
No te compliques montando strings a mano. Usa toLocaleDateString().
const fecha = new Date();
// Formato local simple
console.log(fecha.toLocaleDateString()); // "11/2/2026" (en ES)
// Formato personalizado profesional
const opciones = {
weekday: 'long',
year: 'numeric',
month: 'long',
day: 'numeric'
};
console.log(fecha.toLocaleDateString('es-ES', opciones));
// "martes, 11 de febrero de 2026"