Cómo Creé un Calendario Personalizado con JavaScript y CSS

¿Alguna vez has necesitado un calendario que abarque más de dos años? Yo me encontraba en esa situación hace poco. Buscaba un calendario personalizado que me permitiera planificar mis proyectos a largo plazo, pero después de horas de búsqueda, me di cuenta de que no había nada que se ajustara a mis necesidades. Así que decidí como buen informático, di un paso adelante y construí mi propio generador de calendario de los meses que necesite. Aquí voy a contar algo del proceso.

Mi búsqueda comenzó con una simple necesidad: visualizar tres años completos de un vistazo. La dificultad, que mi primer mes no era enero, sino octubre. El por qué, el proyecto comenzó en octubre. La mayoría de los calendarios y/o generadores disponibles se centran en un año y comenzando con enero, y algunos incluso ofrecen una vista mensual, pero ninguno parecía ofrecer la flexibilidad que requería.

Estructura Básica

Comencé creando la estructura HTML básica. Utilicé una combinación de div y table para organizar los meses en un formato fácil de leer. Cada mes tendría su propio espacio y, al mismo tiempo, todos los meses estarían organizados en una cuad

<div class="container">
    <h1 class="text-center my-4">Calendario Dinámico</h1>
    <div class="controls row g-3 justify-content-center">
        <div class="col-md-3">
            <label for="startDate" class="form-label">Fecha de inicio:</label>
            <input type="date" id="startDate" class="form-control">
        </div>
        <div class="col-md-3">
            <label for="endDate" class="form-label">Fecha de término:</label>
            <input type="date" id="endDate" class="form-control">
        </div>
        <div class="col-md-2">
            <label for="monthsPerRow" class="form-label">Meses por fila:</label>
            <input type="number" id="monthsPerRow" class="form-control" min="1" max="12" value="3">
        </div>
        <div class="col-md-2 d-flex align-items-end">
            <button class="btn btn-success w-100" onclick="window.print()">Imprimir</button>
        </div>
    </div>
    <div class="calendar row mt-5" id="calendarContainer"></div>
</div>

Tecnicamente, es un html normal, el calendario se va a generar con Javascript.

No tiene sentido hacer una descripción detallada, pero en resumen la idea es que el usuiario seleccione un rango de fechas y se generen los meses en esos periodos, incluidos los dos meses de los extremos.

También se incorporo que se pueda seleccionar cuantos meses por fila puedo tener, y el infaltable Imprimir, que permite, claro, Imprimir el calendario.

imprimir

El enlace para ver el calendario es el siguiente Generador de Calendario