Как да изчислите работните седмици между две дати (и защо е по-трудно, отколкото изглежда)
Имате две дати и трябва да знаете колко работни седмици има между тях. Звучи като проблем за пет секунди. Делите дните на 7, може би изваждате уикендите — готово.
Само че не е така, защото „работна седмица“ не е строго определен термин. В зависимост от това какво изчислявате — срок на предизвестие, проектен график, право на отпуск, продължителност на договор — правилният метод е различен, а грешният може да даде отклонение от дни по начин, който има юридическо или финансово значение.
Какво точно означава „работна седмица“?
Най-често „работна седмица“ означава пет дни: от понеделник до петък. Но има гранични случаи, които си струва да знаете:
- Някои индустрии и държави използват 6‑дневна работна седмица (понеделник–събота)
- Някои роли имат компресирана 4‑дневна работна седмица
- В Близкия изток традиционно се използва неделя–четвъртък, макар че повечето държави преминаха към понеделник–петък
- При непълно работно време работната седмица може да е 2, 3 или 4 дни
В останалата част на статията „работна седмица“ означава стандартна седмица понеделник–петък, освен ако не е указано друго. Методите се обобщават лесно, стига да знаете кои са работните дни във вашия случай.
Метод 1: Цели работни седмици
Най-простата интерпретация: колко пълни блокове понеделник–петък се побират между две дати?
Това е, което повечето хора имат предвид, когато питат „колко седмици предизвестие е това?“. 4‑седмично предизвестие означава 4 пълни блока понеделник–петък — 20 работни дни — независимо в кой ден от седмицата започва периодът.
Изчисление:
1. Бройте общия брой календарни дни между двете дати 2. Извадете уикендите: във всеки пълен 7‑дневен блок има 2 почивни дни 3. Отчетете частичните седмици в началото и края
На практика е по-лесно да преброите работните дни и да разделите на 5:
working_weeks = working_days / 5
където working_days е броят на дните понеделник–петък между двете дати.
Пример: 7 април (понеделник) до 2 май (петък)
- Календарни дни: 25
- Уикенди в периода: 4 съботи + 4 недели = 8 дни
- Работни дни: 25 − 8 = 17... чакайте, това не е вярно.
Правилният начин: пребройте понеделник–петък включително:
- Седмица 1: 7–11 апр (5 дни)
- Седмица 2: 14–18 апр (5 дни)
- Седмица 3: 21–25 апр (5 дни)
- Седмица 4: 28 апр–2 май (5 дни)
Общо: 20 работни дни = точно 4 работни седмици.
Понеже примерът започва в понеделник и завършва в петък, резултатът излиза „чист“. Ако началото или краят са по средата на седмицата, получавате дробен резултат — което ни води до следващия метод.
Метод 2: Работни дни, разделени на 5
За повечето практични цели — планиране на проект, оценки на срокове, изчисляване на капацитет — не ви трябват цели седмици. Трябват ви работни дни, а резултатът се изразява като седмици и дни.
Формула:
total_working_days = (full_weeks × 5) + working_days_in_partial_week
weeks = floor(total_working_days / 5)
remaining_days = total_working_days mod 5
Пример: 18 март (сряда) до 11 април (петък)
Брой работни дни:
- 18 мар (ср) до 21 мар (пет): 4 дни
- 24–28 мар: 5 дни
- 31 мар–4 апр: 5 дни
- 7–11 апр: 5 дни
Общо: 19 работни дни = 3 седмици и 4 дни.
Този метод е правилен за проектни графици, където работите с капацитет в дни, а не с календарни седмици.
Метод 3: Обхват по ISO седмици
Понякога „колко седмици между“ означава: каква е разликата в ISO номерата на седмици?
Пример: Събитие тече от ISO седмица 10 до ISO седмица 23. Това е продължителност от 13 ISO седмици.
Изчисление:
week_span = (end_iso_year × 52.18) + end_iso_week − (start_iso_year × 52.18) + start_iso_week
На практика, за дати в една и съща година:
week_span = end_iso_week − start_iso_week
За периоди, които пресичат граница между години, трябва да отчетете дали началната година има 52 или 53 седмици:
week_span = (52_or_53_for_start_year − start_iso_week) + end_iso_week
Този метод е релевантен за телевизионно планиране, ритейл и всяка система, която организира работата по ISO номера на седмици, а не по работни дни.
Проблемът с включването/изключването на датите
Един от най-честите източници на грешки: дали да броите началната дата, крайната дата, и двете, или нито една.
„4‑седмично предизвестие, започващо днес“ може да означава:
- 4 седмици от днес, като днес е ден 1 (включващо начало): периодът свършва в същия ден от седмицата, 4 седмици по-късно
- 4 седмици след днес (изключващо начало): периодът свършва един ден по-късно от горното
Трудовото законодателство в много държави описва това изрично. В UK например срокът тече от деня след подаване на предизвестието. В САЩ зависи от договора.
Разликата е един ден. В повечето ситуации това не е критично. В трудови спорове или прекратяване на договор може да бъде.
Безопасна конвенция: винаги уточнявайте „X работни седмици от [дата], включително/изключително“. Не го оставяйте двусмислено.
Официални празници: изчислението, което всички забравят
Изчисленията на работни седмици, които не отчитат официалните празници, са по дефиниция грешни — ще надценят наличното работно време.
Проблемът: празниците не са стандартизирани. Те зависят от:
- Държавата (Коледа е 25 декември във Великобритания; в Япония не е официален празник)
- Регион в рамките на държава (щатите в САЩ имат различни празници; Англия и Шотландия имат различни bank holidays)
- Годината (подвижни празници като Великден сменят дата)
- Договора (някои позиции имат допълнителни празници; някои публични служители спазват различни дати)
За груби оценки — „това са около 6 работни седмици“ — може да игнорирате празниците. За точни изчисления — договорни срокове, предизвестия, законови времеви рамки — трябва да извадите приложимите празници.
Нито един калкулатор не може да го направи автоматично без да знае юрисдикцията ви и конкретната година. days between dates calculator показва работни дни без уикенди; местните официални празници трябва да извадите ръчно.
Полезно приближение за UK: около 8 bank holidays годишно, приблизително 1.6 на месец. За 3‑месечен период това са около 5 празника за изваждане. За федералните празници в САЩ: 11 годишно, около 0.9 на месец.
Срокове на предизвестие: как работи математиката
Трудовите договори често описват предизвестието като седмици или месеци. Преобразуването в работни дни е мястото, където най-често се греши.
„4 седмици предизвестие“ означава 4 календарни седмици (28 дни), а не 4 × 5 = 20 работни дни. Ако предизвестието е дадено във вторник, то тече 28 календарни дни — включително уикендите. Последният ден е вторник, 4 седмици по‑късно.
Това изненадва хората, защото очакват „4 седмици“ да означава 20 работни дни. Не означава — означава 28 календарни дни, и уикендите в този период пак се броят, въпреки че не се работи.
„1 месец предизвестие“ е още по‑непрецизно. Един месец от 15 януари е 15 февруари. Един месец от 31 януари е 28 февруари (или 29 в високосна година). Броят календарни дни варира между 28 и 31. Броят работни дни в този месец варира между 20 и 23.
Работни седмици vs календарни седмици в договори:
Ако договорът казва „4 работни седмици предизвестие“, това означава 20 работни дни — само понеделник–петък. Уикендите не се броят. В този случай предизвестие, започващо във вторник, ще тече 20 работни дни и ще приключи след повече календарни седмици, в зависимост от уикендите в периода.
Винаги проверявайте дали договорът казва „седмици“ или „работни седмици“. Разликата може да е 8–10 дни при типичен срок на предизвестие.
Проектни срокове: седмици усилие vs календарни седмици
В управлението на проекти „3 седмици работа“ и „3 календарни седмици“ не са едно и също.
3 седмици усилие при пълен капацитет = 15 работни дни. Ако задача изисква 3 седмици усилие от един човек на пълен работен ден, тя трае 3 календарни седмици. Ако двама я споделят, трае 1.5 календарни седмици. Ако един човек е на 50% капацитет, трае 6 календарни седмици.
3 календарни седмици = 15 работни дни, при условие че няма празници, никой не е на непълно време и няма разход за контекст‑превключване.
Това е важно за планиране на дати за доставка. Ако кажете на заинтересована страна, че функция ще отнеме „3 седмици“, а вие имате предвид работни седмици при 80% капацитет с празник по средата, крайната календарна дата ще е различна от това, което си представят.
Когато давате срокове:
- Казвайте работни дни, не седмици, за задачи под месец
- Посочвайте крайната календарна дата като проверка на здравия разум
- Изрично отбелязвайте празниците в периода
Изчисляване на работни седмици в код
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
За големи диапазони по‑бърз подход използва модулна аритметика, за да избегне обхождане по дни:
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;
Бърза справка
| Какво ви трябва | Метод |
|---|---|
| Срок на предизвестие | Календарни дни (уикендите се броят) |
| Работен капацитет на проект | Работни дни (пон–пет), разделете на 5 за седмици |
| Планиране за медии/ритейл | ISO обхват по седмици |
| Право на отпуск | Работни дни, извадете официалните празници |
| Договорни срокове | Календарни дни, освен ако договорът не казва „работни дни“ |
days between dates calculator показва и календарните, и работните дни за всеки период — полезно като отправна точка, преди да извадите официалните празници за вашата юрисдикция.