Com calcular les setmanes laborables entre dues dates (i per què és més difícil del que sembla)

Tens dues dates i necessites saber quantes setmanes laborables hi ha entre elles. Sona com un problema de cinc segons. Divideixes els dies per 7, potser restes alguns caps de setmana — fet.

Però no és així, perquè “setmana laborable” no és un terme precís. Depenent de què estiguis calculant — un període de preavís, un calendari de projecte, un dret de vacances, la durada d’un contracte — el mètode correcte és diferent, i fer servir el mètode equivocat pot desviar-se per dies d’una manera que pot importar legalment o econòmicament.

Què és exactament una “setmana laborable”?

Una setmana laborable acostuma a significar cinc dies: de dilluns a divendres. Però hi ha casos límit que val la pena conèixer:

  • Alguns sectors i països utilitzen una setmana laboral de 6 dies (dilluns–dissabte)
  • Alguns llocs tenen setmanes comprimides de 4 dies
  • A l’Orient Mitjà tradicionalment s’utilitza diumenge–dijous, tot i que la majoria de països han passat a dilluns–divendres
  • El personal a temps parcial pot tenir setmanes laborables de 2, 3 o 4 dies

Per a la resta d’aquest article, “setmana laborable” vol dir una setmana estàndard de dilluns a divendres, tret que s’indiqui el contrari. Els mètodes es generalitzen un cop saps quins són els dies laborables del teu cas.

Mètode 1: Setmanes laborables senceres

La interpretació més simple: quants blocs complets de dilluns a divendres caben entre dues dates?

Això és el que la majoria de gent vol dir quan pregunta “quantes setmanes de preavís és això?”. Un preavís de 4 setmanes vol dir 4 blocs complets de dilluns–divendres — 20 dies laborables — independentment d’on caigui la data d’inici dins la setmana.

El càlcul:

1. Comptar el total de dies de calendari entre les dues dates 2. Restar els caps de setmana: cada bloc complet de 7 dies conté 2 dies de cap de setmana 3. Tenir en compte les setmanes parcials al començament i al final

A la pràctica és més fàcil comptar directament els dies laborables i dividir per 5:

working_weeks = working_days / 5

on working_days és el recompte de dies de dilluns a divendres entre les dues dates.

Exemple: 7 d’abril (dilluns) a 2 de maig (divendres)

  • Dies de calendari: 25
  • Caps de setmana dins el rang: 4 dissabtes + 4 diumenges = 8 dies
  • Dies laborables: 25 − 8 = 17... espera, això no està bé.

La manera correcta: comptar de dilluns a divendres incloent-los:

  • Setmana 1: 7–11 d’abr (5 dies)
  • Setmana 2: 14–18 d’abr (5 dies)
  • Setmana 3: 21–25 d’abr (5 dies)
  • Setmana 4: 28 d’abr–2 de maig (5 dies)

Total: 20 dies laborables = 4 setmanes laborables exactes.

Com que l’exemple comença en dilluns i acaba en divendres, surt net. Començar o acabar a mitja setmana dona un resultat fraccionari, i aquí entra el mètode següent.

Mètode 2: Dies laborables dividits per 5

Per a la majoria d’usos pràctics — planificació de projectes, estimacions de calendari, càlculs de capacitat — no necessites setmanes senceres. Necessites dies laborables i expresses el resultat com setmanes i dies.

La fórmula:

total_working_days = (full_weeks × 5) + working_days_in_partial_week
weeks = floor(total_working_days / 5)
remaining_days = total_working_days mod 5

Exemple: 18 de març (dimecres) a 11 d’abril (divendres)

Compta dies laborables:

  • 18 de març (dc) a 21 de març (dv): 4 dies
  • 24–28 de març: 5 dies
  • 31 de març–4 d’abril: 5 dies
  • 7–11 d’abril: 5 dies

Total: 19 dies laborables = 3 setmanes i 4 dies.

Aquest mètode és el correcte per a calendaris de projecte quan treballes amb capacitat en dies, no amb setmanes de calendari.

Mètode 3: Rang de setmanes ISO

De vegades “quantes setmanes entre” vol dir: quina és la diferència en números de setmana ISO?

Exemple: Un esdeveniment va de la setmana ISO 10 a la setmana ISO 23. Això són 13 setmanes ISO de durada.

El càlcul:

week_span = (end_iso_year × 52.18) + end_iso_week − (start_iso_year × 52.18) + start_iso_week

A la pràctica, per a dates dins el mateix any:

week_span = end_iso_week − start_iso_week

Per a dates que travessen un canvi d’any, cal tenir en compte si l’any d’inici té 52 o 53 setmanes:

week_span = (52_or_53_for_start_year − start_iso_week) + end_iso_week

Aquest mètode és rellevant per a planificació de difusió (broadcast), planificació minorista i qualsevol sistema que organitzi la feina per número de setmana ISO en lloc de dies laborables.

El problema d’inclusivitat de les dates

Una de les fonts d’errors més habituals: si s’ha de comptar la data d’inici, la data de final, totes dues o cap.

Un “preavís de 4 setmanes que comença avui” podria voler dir:

  • 4 setmanes a partir d’avui, on avui és el dia 1 (inici inclusiu): el període acaba el mateix dia de la setmana, 4 setmanes després
  • 4 setmanes després d’avui (inici exclusiu): el període acaba un dia més tard que l’anterior

La legislació laboral a la majoria de països ho especifica explícitament. Al Regne Unit, el dret laboral compta el preavís des de l’endemà que es dona l’avís. Als EUA varia segons el contracte.

La diferència és d’un dia. En la majoria de casos no importa. En disputes laborals o rescissions de contracte, pot importar.

Convenció segura: especifica sempre “X setmanes laborables des de [data], inclusiu/exclusiu”. No ho deixis ambigu.

Festius: el càlcul que tothom oblida

Els càlculs de setmanes laborables que no tenen en compte els festius estan malament per definició — sobrecompten el temps de treball disponible.

El repte: els festius no estan estandarditzats. Varien segons:

  • País (Nadal és el 25 de desembre al Regne Unit; al Japó no és festiu)
  • Regió dins d’un país (els estats dels EUA tenen festius diferents; Anglaterra i Escòcia tenen “bank holidays” diferents)
  • Any (festes mòbils com Pasqua canvien de data cada any)
  • Contracte laboral (algunes feines tenen festius addicionals; alguns treballadors del sector públic observen dates diferents)

Per a estimacions aproximades — “això són unes 6 setmanes laborables” — ignorar festius està bé. Per a càlculs precisos — terminis contractuals, preavisos, marcs legals — has de restar els festius aplicables.

Cap calculadora pot fer això automàticament sense saber la teva jurisdicció i l’any concret. El days between dates calculator et dona el recompte de dies laborables excloent caps de setmana; tu has de restar manualment els festius locals.

Una aproximació útil per al Regne Unit: hi ha uns 8 dies festius bancaris a l’any, aproximadament 1.6 per mes. Per a un càlcul de 3 mesos, això són uns 5 festius a restar. Per als festius federals dels EUA: 11 a l’any, aproximadament 0.9 per mes.

Períodes de preavís: com funciona realment la matemàtica

Els contractes laborals especifiquen preavisos en setmanes o mesos. Convertir això a dies laborables és on es cometen més errors.

“Preavís de 4 setmanes” vol dir 4 setmanes de calendari (28 dies), no 4 × 5 = 20 dies laborables. Si dones l’avís un dimarts, dura 28 dies de calendari — incloent caps de setmana. L’últim dia del període de preavís és el dimarts 4 setmanes després.

Això sorprèn perquè molta gent espera que “4 setmanes” vulgui dir 20 dies laborables. No — vol dir 28 dies de calendari, i els caps de setmana compten dins el període de preavís encara que no s’hi treballi.

“Preavís d’1 mes” és encara menys precís. Un mes a partir del 15 de gener és el 15 de febrer. Un mes a partir del 31 de gener és el 28 de febrer (o 29 en un any de traspàs). El nombre de dies de calendari varia de 28 a 31. El nombre de dies laborables dins d’aquest mes varia de 20 a 23.

Setmanes laborables vs setmanes de calendari en contractes:

Si un contracte diu “preavís de 4 setmanes laborables”, vol dir 20 dies laborables — només de dilluns a divendres. Els caps de setmana no compten. En aquest cas, un preavís que comença un dimarts duraria 20 dies laborables i acabaria diverses setmanes de calendari després, depenent de quants caps de setmana caiguin dins el període.

Comprova sempre si el contracte diu “setmanes” o “setmanes laborables”. La diferència pot ser de 8–10 dies en un preavís típic.

Calendaris de projecte: setmanes d’esforç vs setmanes de calendari

En gestió de projectes, “3 setmanes de feina” i “3 setmanes de calendari” no són el mateix.

3 setmanes d’esforç a plena capacitat = 15 dies laborables per persona. Si una tasca és de 3 setmanes d’esforç per a una persona a jornada completa, triga 3 setmanes de calendari. Si dues persones se la reparteixen, triga 1.5 setmanes de calendari. Si una persona està al 50% de capacitat, triga 6 setmanes de calendari.

3 setmanes de calendari = 15 dies laborables assumint que no hi ha festius, que ningú és a temps parcial i que no hi ha sobrecost de canvi de context.

La diferència importa en planificar dates d’entrega. Si dius a una persona interessada que una funcionalitat trigarà “3 setmanes” i tu vols dir setmanes laborables al 80% de capacitat amb un festiu pel mig, la data final de calendari és molt diferent del que s’imagina.

Quan donis terminis:

  • Indica dies laborables, no setmanes, per a tasques de menys d’un mes
  • Indica la data final de calendari com a comprovació de seny
  • Anota explícitament els festius dins la finestra

Calcular setmanes laborables amb codi

Python:

from datetime import date, timedelta

def working_days(start: date, end: date) -> int:
    total = 0
    current = start
    while current <= end:
        if current.weekday() < 5:  # 0=Mon, 4=Fri
            total += 1
        current += timedelta(days=1)
    return total

def working_weeks(start: date, end: date) -> float:
    return working_days(start, end) / 5

# Example
start = date(2026, 4, 7)
end = date(2026, 5, 2)
print(working_days(start, end))   # 20
print(working_weeks(start, end))  # 4.0

Per a rangs de dates grans, una aproximació més ràpida utilitza aritmètica modular per evitar iterar:

def working_days_fast(start: date, end: date) -> int:
    days = (end - start).days + 1
    full_weeks, remainder = divmod(days, 7)
    working = full_weeks * 5
    # Count working days in the partial week
    start_dow = start.weekday()  # 0=Mon
    for i in range(remainder):
        if (start_dow + i) % 7 < 5:
            working += 1
    return working

JavaScript:

function workingDays(start, end) {
  let count = 0
  const current = new Date(start)
  while (current <= end) {
    const day = current.getDay()
    if (day !== 0 && day !== 6) count++  // 0=Sun, 6=Sat
    current.setDate(current.getDate() + 1)
  }
  return count
}

function workingWeeks(start, end) {
  return workingDays(start, end) / 5
}

SQL (PostgreSQL):

-- Working days between two dates (excluding weekends)
SELECT
  (EXTRACT(DOW FROM end_date) - EXTRACT(DOW FROM start_date))::int +
  ((end_date - start_date) / 7) * 5 +
  CASE WHEN EXTRACT(DOW FROM start_date) = 0 THEN 1 ELSE 0 END +
  CASE WHEN EXTRACT(DOW FROM end_date) = 6 THEN -1 ELSE 0 END
AS working_days
FROM (SELECT DATE '2026-04-07' AS start_date, DATE '2026-05-02' AS end_date) t;

Una referència ràpida

What you wantMethod
Notice period durationCalendar days (weekends count)
Project working capacityWorking days (Mon–Fri), divide by 5 for weeks
Broadcast/retail planningISO week span
Leave entitlementWorking days, subtract public holidays
Contract deadlinesCalendar days unless contract says "working days"

El days between dates calculator mostra tant els dies de calendari com els dies laborables per a qualsevol rang de dates — útil com a punt de partida abans d’ajustar pels festius de la teva jurisdicció.

Articles relacionats