Cum calculezi săptămânile lucrătoare dintre două date (și de ce e mai complicat decât pare)
Ai două date și trebuie să știi câte săptămâni lucrătoare sunt între ele. Sună ca un calcul de cinci secunde: împarți zilele la 7, scazi niște weekenduri și gata.
Doar că nu e chiar așa, pentru că „săptămână lucrătoare” nu este un termen perfect precis. În funcție de ce calculezi — un preaviz, un calendar de proiect, un drept de concediu, durata unui contract — metoda corectă poate fi diferită, iar o metodă greșită poate să te lase cu o eroare de câteva zile care contează legal sau financiar.
Ce înseamnă, de fapt, „săptămână lucrătoare”?
Cel mai des, o săptămână lucrătoare înseamnă 5 zile: luni–vineri. Dar există situații speciale:
- Unele industrii și țări folosesc săptămână de lucru de 6 zile (luni–sâmbătă)
- Unele roluri au săptămână comprimată de 4 zile
- În Orientul Mijlociu s-a folosit tradițional duminică–joi, deși multe țări au trecut la luni–vineri
- Angajații part-time pot avea săptămâni de lucru de 2, 3 sau 4 zile
În restul articolului, „săptămână lucrătoare” înseamnă luni–vineri, dacă nu se precizează altfel. Metodele se generalizează ușor dacă știi ce zile sunt lucrătoare în cazul tău.
Metoda 1: săptămâni lucrătoare întregi
Interpretarea cea mai simplă: câte blocuri complete luni–vineri încap între două date?
Asta înțeleg mulți când întreabă „câte săptămâni de preaviz sunt?”. Un preaviz de 4 săptămâni lucrătoare înseamnă 4 blocuri complete luni–vineri — 20 de zile lucrătoare — indiferent în ce zi din săptămână începe perioada.
Calculul:
1. Calculează numărul total de zile calendaristice dintre cele două date 2. Scade weekendurile: fiecare bloc complet de 7 zile conține 2 zile de weekend 3. Ține cont de săptămânile parțiale de la început și de la final
În practică e mai simplu să numeri direct zilele lucrătoare și să împarți la 5:
saptamani_lucratoare = zile_lucratoare / 5
unde zile_lucratoare este numărul de zile luni–vineri din interval.
Exemplu: 7 aprilie (luni) până la 2 mai (vineri)
Pentru că începe luni și se termină vineri, iese „curat”:
- Săpt. 1: 7–11 apr (5 zile)
- Săpt. 2: 14–18 apr (5 zile)
- Săpt. 3: 21–25 apr (5 zile)
- Săpt. 4: 28 apr–2 mai (5 zile)
Total: 20 de zile lucrătoare = exact 4 săptămâni lucrătoare.
Dacă începi sau termini la mijlocul săptămânii, obții un rezultat fracționar — de aici utilitatea metodei următoare.
Metoda 2: zile lucrătoare împărțite la 5
Pentru majoritatea situațiilor practice — planificare de proiect, estimări, calcule de capacitate — nu ai nevoie de săptămâni întregi. Ai nevoie de zile lucrătoare și de un rezultat exprimat ca „săptămâni + zile”.
Formula:
total_zile_lucratoare = (saptamani_intregi × 5) + zile_lucratoare_in_saptamana_partială
saptamani = floor(total_zile_lucratoare / 5)
zile_ramase = total_zile_lucratoare mod 5
Exemplu: 18 martie (miercuri) până la 11 aprilie (vineri)
Numără zilele lucrătoare:
- 18 mar (mie) până la 21 mar (vin): 4 zile
- 24–28 mar: 5 zile
- 31 mar–4 apr: 5 zile
- 7–11 apr: 5 zile
Total: 19 zile lucrătoare = 3 săptămâni și 4 zile.
Această metodă este potrivită pentru planificare de proiect, unde lucrezi în zile disponibile, nu în săptămâni calendaristice.
Metoda 3: diferența de săptămâni ISO
Uneori „câte săptămâni între” înseamnă: care este diferența dintre numerele de săptămână ISO?
Exemplu: un eveniment rulează de la Săptămâna ISO 10 până la Săptămâna ISO 23. Asta înseamnă o durată de 13 săptămâni ISO.
Calculul:
span = (an_iso_final × 52.18) + saptamana_iso_finala − (an_iso_initial × 52.18) + saptamana_iso_initiala
În practică, dacă datele sunt în același an:
span = saptamana_iso_finala − saptamana_iso_initiala
Dacă intervalul trece peste granița dintre ani, trebuie să ții cont dacă anul de start a avut 52 sau 53 de săptămâni:
span = (52_sau_53_pentru_anul_initial − saptamana_iso_initiala) + saptamana_iso_finala
Metoda e relevantă în broadcast, retail planning și sisteme care organizează munca pe săptămâni ISO, nu pe zile lucrătoare.
Problema „incluziv/exclusiv” la date
O sursă frecventă de erori: dacă numeri data de început, data de sfârșit, ambele sau niciuna.
„Un preaviz de 4 săptămâni începând de azi” poate însemna:
- 4 săptămâni de la azi, cu azi ca ziua 1 (start incluziv): se termină în aceeași zi a săptămânii, peste 4 săptămâni
- 4 săptămâni după azi (start exclusiv): se termină cu o zi mai târziu
Diferența este de o zi. De multe ori nu contează, dar în dispute de muncă sau rezilieri de contract poate conta.
Convenție sigură: specifică întotdeauna „X săptămâni lucrătoare de la [data], incluziv/exclusiv”. Nu lăsa ambiguu.
Sărbătorile legale: calculele pe care le uită toată lumea
Calculele de săptămâni lucrătoare care ignoră sărbătorile legale sunt greșite prin definiție — supraestimează timpul de lucru disponibil.
Problema este că sărbătorile nu sunt standardizate. Diferă după:
- țară
- regiune în interiorul unei țări
- an (sărbători mobile precum Paștele)
- contract de muncă (unele roluri au zile libere suplimentare)
Pentru estimări „din ochi” — „cam 6 săptămâni lucrătoare” — ignorarea sărbătorilor e acceptabilă. Pentru termene precise — contracte, preavize, termene legale — trebuie să scazi sărbătorile aplicabile.
Nicio unealtă nu poate face asta automat fără să știe jurisdicția și anul. Instrumentul Zile între date îți dă numărul de zile lucrătoare fără weekend; apoi scazi manual sărbătorile locale.
O aproximație utilă pentru UK: ~8 bank holidays pe an (cam 1.6 pe lună). Pentru sărbătorile federale din SUA: 11 pe an (cam 0.9 pe lună).
Preavize: cum funcționează matematica în realitate
Contractele de muncă exprimă preavizele în săptămâni sau luni. Conversia în zile lucrătoare este locul unde apar cele mai multe greșeli.
„Preaviz de 4 săptămâni” înseamnă 4 săptămâni calendaristice (28 de zile), nu 4 × 5 = 20 de zile lucrătoare. Dacă dai preaviz marți, perioada curge 28 de zile calendaristice — include weekenduri. Ultima zi este marți, după 4 săptămâni.
Mulți se așteaptă ca „4 săptămâni” să însemne 20 de zile lucrătoare. Nu înseamnă — înseamnă 28 de zile calendaristice.
„Preaviz de 1 lună” este și mai puțin precis. O lună de la 15 ianuarie este 15 februarie. O lună de la 31 ianuarie este 28 februarie (sau 29 într-un an bisect). Numărul de zile calendaristice variază între 28 și 31. Numărul de zile lucrătoare din acea lună variază, de obicei, între 20 și 23.
Săptămâni lucrătoare vs săptămâni calendaristice în contracte:
Dacă un contract spune „4 săptămâni lucrătoare”, asta înseamnă 20 de zile lucrătoare — doar luni–vineri. Weekendurile nu se numără. În acest caz, un preaviz început marți va dura 20 de zile lucrătoare și se va termina după mai multe săptămâni calendaristice, în funcție de câte weekenduri intră în interval.
Verifică mereu dacă scrie „weeks” sau „working weeks”. Diferența poate fi de 8–10 zile la un preaviz tipic.
Proiecte: „săptămâni de efort” vs „săptămâni calendaristice”
În project management, „3 săptămâni de lucru” și „3 săptămâni calendaristice” nu sunt același lucru.
3 săptămâni de efort la capacitate completă = 15 zile‑om. Dacă o sarcină e 3 săptămâni de efort pentru o persoană full‑time, durează 3 săptămâni calendaristice. Dacă lucrează două persoane, durează 1.5 săptămâni. Dacă o persoană are doar 50% disponibilitate, durează 6 săptămâni calendaristice.
3 săptămâni calendaristice = 15 zile lucrătoare, presupunând că nu există sărbători, nu există part‑time și nu există cost de context switching.
La estimări:
- Pentru sarcini sub o lună, indică zile lucrătoare, nu săptămâni
- Notează și data de final calendaristică, ca sanity check
- Menționează explicit sărbătorile din interval
Calcularea săptămânilor lucrătoare în cod
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
Pentru intervale mari, o abordare mai rapidă folosește aritmetică modulară ca să evite bucla pe fiecare zi:
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;
Referință rapidă
| Ce vrei să afli | Metodă |
|---|---|
| Durata preavizului | Zile calendaristice (weekendurile se numără) |
| Capacitate de lucru în proiect | Zile lucrătoare (Lu–Vi), împarte la 5 pentru săptămâni |
| Broadcast/retail planning | Diferență de săptămâni ISO |
| Concedii | Zile lucrătoare, scazi sărbătorile |
| Termene contractuale | Zile calendaristice, dacă nu scrie „zile lucrătoare” |
Instrumentul Zile între date arată atât zile calendaristice, cât și zile lucrătoare pentru orice interval — util ca punct de plecare înainte să ajustezi pentru sărbători în jurisdicția ta.


