🛠️ToolsShed

Calculadora de Semanas Laborales

Cuenta semanas laborales y números de semana ISO en un rango de fechas.

Loading...

Una calculadora de semanas laborables te ayuda a contar el número de semanas de trabajo entre dos fechas, lo cual es útil para la planificación de proyectos, períodos de nómina, duraciones de contratos y calendarios académicos. A diferencia de simplemente dividir los días entre 7, este cálculo respeta las semanas parciales y sigue el estándar ISO 8601, que define el lunes como el primer día de la semana.

Los números de semana ISO son una forma internacionalmente estandarizada de identificar las semanas del año, ampliamente utilizada en Europa y en sectores como la manufactura, logística y construcción. La semana 1 del calendario ISO se define como la que contiene el primer jueves del año. Esta herramienta calcula tanto el total de semanas laborables como el número de semana ISO correspondiente a cada una.

Para usar la calculadora, simplemente selecciona una fecha de inicio y una fecha de fin. Los resultados incluyen el número total de semanas laborables, un desglose por mes y los números de semana ISO, calculados al instante en tu navegador sin enviar datos a ningún servidor.

Preguntas Frecuentes

Implementación de Código

from datetime import date, timedelta

def get_iso_week(d: date) -> tuple[int, int]:
    """Return (iso_year, iso_week) for a date"""
    iso = d.isocalendar()
    return iso.year, iso.week

def get_monday_of_week(d: date) -> date:
    """Get the Monday of the week containing date d"""
    days_since_monday = d.weekday()  # Monday=0, Sunday=6
    return d - timedelta(days=days_since_monday)

def count_work_weeks(start: date, end: date) -> list[dict]:
    """List all ISO work weeks in a date range"""
    weeks = []
    current = get_monday_of_week(start)

    while current <= end:
        iso_year, iso_week = get_iso_week(current)
        friday = current + timedelta(days=4)
        weeks.append({
            'iso_year': iso_year,
            'iso_week': iso_week,
            'week_label': f'W{iso_week:02d}',
            'start': current,
            'end': friday,
            'month': current.strftime('%B %Y'),
        })
        current += timedelta(weeks=1)

    return weeks

# Usage
start = date(2026, 1, 1)
end = date(2026, 3, 31)
weeks = count_work_weeks(start, end)

print(f"Total work weeks: {len(weeks)}")
for w in weeks[:5]:  # Show first 5
    print(f"  {w['week_label']} ({w['iso_year']}): {w['start']} - {w['end']}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.