🛠️ToolsShed

Calcolatore Settimane Lavorative

Conta le settimane lavorative e i numeri di settimana ISO in un intervallo di date.

Loading...

Un calcolatore di settimane lavorative ti aiuta a contare il numero di settimane di lavoro tra due date, utile per la pianificazione dei progetti, i periodi di busta paga, la durata dei contratti e i calendari accademici. A differenza della semplice divisione dei giorni per 7, questo calcolo gestisce correttamente le settimane parziali e segue lo standard ISO 8601, che definisce il lunedì come primo giorno della settimana.

I numeri di settimana ISO sono un metodo standardizzato a livello internazionale per identificare le settimane dell'anno, ampiamente utilizzato in Europa e in settori come la produzione, la logistica e l'edilizia. La settimana 1 del calendario ISO è definita come quella che contiene il primo giovedì dell'anno. Questo strumento calcola sia il totale delle settimane lavorative sia il numero di settimana ISO corrispondente.

Per usare il calcolatore, seleziona semplicemente una data di inizio e una data di fine. I risultati includono il numero totale di settimane lavorative, una suddivisione per mese e i numeri di settimana ISO, calcolati istantaneamente nel browser senza inviare dati a nessun server.

Domande Frequenti

Implementazione del Codice

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.