JS 23: Fechas y Tiempo (Date)

Domina el tiempo en JavaScript: Crear, modificar y calcular con fechas.

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"
Volver a JS