Ako previesť číslo týždňa na dátumový rozsah — kompletný návod
Niekto vám pošle harmonogram. „Dodanie v W23.“ Otvoríte kalendár a pozeráte. Aké presné dátumy to sú?
Čísla týždňov sa používajú všade v plánovaní projektov, výrobe, maloobchode a logistike — ale väčšina ľudí ich pozná len ako štítky. Prevod čísla týždňa späť na konkrétne kalendárne dni je menej intuitívny, než by mal byť, a prípady na prelome rokov potrápia aj skúsených vývojárov.
Tento návod pokrýva celý prevod: číslo týždňa na pondelok, číslo týždňa na celý rozsah (pondelok–nedeľa) a aj opačný smer (dátum → číslo týždňa). Pridáva kód pre Python, JavaScript, Excel a SQL.
Čo vám číslo týždňa vlastne hovorí
Skôr než začnete počítať, musíte vedieť, z akého systému číslovania týždňov číslo pochádza.
ISO 8601 (medzinárodný štandard): Týždeň 1 je týždeň, ktorý obsahuje prvý štvrtok v roku. Týždne bežia od pondelka do nedele. Rok má 52 alebo 53 ISO týždňov. Dôležité: ISO rok týždňa sa môže líšiť od kalendárneho roka. Posledné dni decembra môžu patriť do týždňa 1 nasledujúceho ISO roka.
USA štýl: Týždeň 1 obsahuje 1. január. Týždne môžu byť nedeľa–sobota alebo pondelok–nedeľa podľa nástroja. 1. január je vždy v týždni 1.
V zvyšku tohto návodu znamená „číslo týždňa“ ISO 8601, pokiaľ nie je uvedené inak. Ak číslo prišlo z US nástroja (napr. predvolené Excel WEEKNUM), vzorec je iný — pozrite sekciu nižšie.
Potrebujete aj rok. „Týždeň 23“ bez roka je bez významu. Vždy berte týždne ako dvojicu (rok, týždeň). Týždeň 23 v 2025 začína 2. júna. Týždeň 23 v 2026 začína 1. júna. A týždeň 1 v 2026 začína 29. decembra 2025.
Základný vzorec: ISO číslo týždňa → pondelok
Každý ISO týždeň začína pondelkom. Ak chcete nájsť pondelok ISO týždňa W v roku Y:
Pondelok = 4. január v roku Y + (W - 1) × 7 dní - weekday(4. január v roku Y) + 1
Logika: 4. január je vždy v ISO týždni 1 (z definície). Nájdite pondelok týždňa, v ktorom leží 4. január, a potom sa posuňte o (W - 1) týždňov.
Čistejšia ekvivalencia:
Pondelok W1 = 4. január v roku Y - weekday(4. január v roku Y) + 1
Pondelok W = Pondelok W1 + (W - 1) × 7
kde weekday vracia 1 pre pondelok až 7 pre nedeľu (ISO číslovanie dňa v týždni).
Príklad: týždeň 23 v roku 2026
- 4. január 2026 je nedeľa. ISO weekday = 7.
- Pondelok W1: 4. január − 7 + 1 = 29. december 2025.
- Pondelok W23: 29. december 2025 + 22 × 7 = 29. december + 154 dní = 1. jún 2026.
- Nedeľa W23: 1. jún + 6 = 7. jún 2026.
Týždeň 23 v roku 2026 je od 1. júna (pondelok) do 7. júna (nedeľa).
Pasca na prelome rokov
Najčastejšia chyba: predpokladať, že týždeň 1 v roku Y vždy začína v roku Y.
Nezačína.
Týždeň 1 je týždeň, ktorý obsahuje prvý štvrtok v roku. Ak je ten štvrtok na začiatku januára, pondelok týždňa 1 môže spadnúť do predchádzajúceho decembra.
Príklady:
| ISO Week | Year | Monday | Sunday |
|---|---|---|---|
| W1 | 2025 | December 30, 2024 | January 5, 2025 |
| W1 | 2026 | December 29, 2025 | January 4, 2026 |
| W1 | 2027 | January 4, 2027 | January 10, 2027 |
| W1 | 2028 | January 3, 2028 | January 9, 2028 |
W1 v 2025 začína v decembri 2024. W1 v 2026 začína v decembri 2025.
To znamená:
- 29.–31. december 2025 patrí do ISO týždňa 1 roku 2026, nie 2025.
- Ak niekto povie „dodanie do W1 2026“, termín je týždeň začínajúci 29. decembra 2025.
Existuje aj opačná pasca: posledné dni niektorých rokov patria do týždňa 1 nasledujúceho ISO roka, nie do posledného týždňa aktuálneho roka. Vždy používajte ISO rok týždňa (%G v Pythone, isoyear v PostgreSQL), nie kalendárny rok.
Celý dátumový rozsah pre ľubovoľné číslo týždňa
Keď máte pondelok, zvyšok je jednoduchý:
| Deň | Posun od pondelka |
|---|---|
| Pondelok | +0 |
| Utorok | +1 |
| Streda | +2 |
| Štvrtok | +3 |
| Piatok | +4 |
| Sobota | +5 |
| Nedeľa | +6 |
Rozsah pre týždeň W je: [pondelok, pondelok + 6 dní].
Pre pracovné dni (po–pi): [pondelok, pondelok + 4 dni].
Python
from datetime import date, timedelta
def iso_week_to_monday(year: int, week: int) -> date:
# Jan 4 is always in ISO week 1
jan4 = date(year, 1, 4)
# Move back to Monday of that week
week1_monday = jan4 - timedelta(days=jan4.weekday())
# Step forward to the target week
return week1_monday + timedelta(weeks=week - 1)
def iso_week_to_range(year: int, week: int) -> tuple[date, date]:
monday = iso_week_to_monday(year, week)
sunday = monday + timedelta(days=6)
return monday, sunday
# Examples
monday, sunday = iso_week_to_range(2026, 23)
print(monday) # 2026-06-01
print(sunday) # 2026-06-07
monday, sunday = iso_week_to_range(2026, 1)
print(monday) # 2025-12-29 ← note: starts in 2025
print(sunday) # 2026-01-04
Python má aj vstavaný opačný smer (dátum → ISO týždeň):
d = date(2026, 6, 4)
iso_year, iso_week, iso_weekday = d.isocalendar()
print(iso_year, iso_week) # 2026 23
Použite d.isocalendar().year (nie d.year) keď potrebujete ISO rok — na prelome rokov sa môžu líšiť.
Opačný smer pomocou fromisocalendar (Python 3.8+):
# Get Monday of ISO week 23, 2026 directly
monday = date.fromisocalendar(2026, 23, 1) # weekday 1 = Monday
print(monday) # 2026-06-01
date.fromisocalendar(year, week, weekday) je najčistejší prístup, ak máte Python 3.8 alebo novší.
JavaScript
JavaScript nemá natívnu podporu ISO týždňov. Manuálna implementácia:
function isoWeekToMonday(year, week) {
// Jan 4 is always in ISO week 1
const jan4 = new Date(year, 0, 4)
const dayOfWeek = jan4.getDay() || 7 // convert Sun=0 to 7
const week1Monday = new Date(jan4)
week1Monday.setDate(jan4.getDate() - dayOfWeek + 1)
const monday = new Date(week1Monday)
monday.setDate(week1Monday.getDate() + (week - 1) * 7)
return monday
}
function isoWeekToRange(year, week) {
const monday = isoWeekToMonday(year, week)
const sunday = new Date(monday)
sunday.setDate(monday.getDate() + 6)
return { monday, sunday }
}
// Examples
const { monday, sunday } = isoWeekToRange(2026, 23)
console.log(monday.toISOString().slice(0, 10)) // 2026-06-01
console.log(sunday.toISOString().slice(0, 10)) // 2026-06-07
const w1 = isoWeekToRange(2026, 1)
console.log(w1.monday.toISOString().slice(0, 10)) // 2025-12-29
Použitie date-fns:
import { setISOWeek, setISOWeekYear, startOfISOWeek, endOfISOWeek } from 'date-fns'
function isoWeekToRange(year, week) {
let d = new Date(year, 0, 4) // any date in the target year
d = setISOWeekYear(d, year)
d = setISOWeek(d, week)
return {
monday: startOfISOWeek(d),
sunday: endOfISOWeek(d)
}
}
date-fns správne rieši všetky okrajové prípady a je odporúčaný pre produkčný kód.
Excel a Google Sheets
Excel nemá priamu funkciu „číslo týždňa → dátum“, ale dá sa poskladať vzorcom.
Pondelok ISO týždňa W v roku Y:
=DATE(Y,1,4) - WEEKDAY(DATE(Y,1,4),2) + 1 + (W-1)*7
Rozpis:
DATE(Y,1,4)— 4. január daného rokaWEEKDAY(DATE(Y,1,4),2)— deň v týždni, kde pondelok=1, nedeľa=7- odčítanie dá pondelok týždňa 1
(W-1)*7posunie na cieľový týždeň
Pre celý rozsah je nedeľa:
=Monday_formula + 6
Príklad v tabuľke (A1 = rok, B1 = číslo týždňa):
Monday: =DATE(A1,1,4) - WEEKDAY(DATE(A1,1,4),2) + 1 + (B1-1)*7
Sunday: =Monday_cell + 6
Formátujte bunky ako dátumy. Pre rok 2026, týždeň 1, vzorec vráti 29. december 2025 pre pondelok — čo je správne.
Opačný smer (dátum → ISO týždeň): použite ISOWEEKNUM(date). Pre ISO rok použite workaround z článku o ISOWEEKNUM, keďže Excel nemá natívnu funkciu ISO roka.
SQL
PostgreSQL má najkompletnejšiu ISO podporu:
-- Monday of ISO week W in year Y
SELECT
make_date(2026, 1, 4)
+ (23 - 1) * 7 -- step to week 23
- EXTRACT(isodow FROM make_date(2026, 1, 4))::int + 1
AS week_monday;
-- 2026-06-01
-- Or more cleanly using generate_series for a range lookup
SELECT
d::date AS week_monday,
(d + 6)::date AS week_sunday,
EXTRACT(isoyear FROM d) AS iso_year,
EXTRACT(week FROM d) AS iso_week
FROM generate_series(
DATE '2026-01-01',
DATE '2026-12-31',
INTERVAL '7 days'
) d
WHERE EXTRACT(week FROM d) = 23
AND EXTRACT(isoyear FROM d) = 2026;
Najjednoduchší prístup cez to_date s ISO formátmi:
-- Convert ISO year + week to Monday
SELECT to_date('2026' || '23' || '1', 'IYYYIWid') AS monday;
-- 2026-06-01
-- Format: IYYY=ISO year, IW=ISO week, id=ISO day (1=Monday)
MySQL:
-- Monday of ISO week 23, 2026
SELECT STR_TO_DATE('202623 Monday', '%X%V %W');
-- 2026-06-01
-- Or step-based:
SELECT DATE_ADD(
DATE_ADD(STR_TO_DATE('2026-01-04', '%Y-%m-%d'),
INTERVAL (-(WEEKDAY(STR_TO_DATE('2026-01-04', '%Y-%m-%d')))) DAY),
INTERVAL (23 - 1) * 7 DAY
) AS week_monday;
SQL Server:
-- Monday of ISO week 23, 2026
DECLARE @year INT = 2026, @week INT = 23
SELECT DATEADD(
DAY,
(@week - 1) * 7
- (DATEPART(WEEKDAY, DATEFROMPARTS(@year, 1, 4)) + 5) % 7,
DATEFROMPARTS(@year, 1, 4)
) AS week_monday;
-- 2026-06-01
US štýl: číslo týždňa → dátumy
Ak číslo týždňa pochádza z US systému (týždeň 1 = obsahuje 1. január, týždne začínajú v nedeľu alebo pondelok), vzorec je jednoduchší, pretože nemá ISO pasce na prelome rokov:
Začiatok týždňa (nedeľný štart):
Week_start = DATE(Y, 1, 1) + (W - 1) × 7 - WEEKDAY(DATE(Y, 1, 1), 1)
kde WEEKDAY vracia 1 pre nedeľu až 7 pre sobotu.
US týždne sú však v plánovaní a logistike oveľa menej bežné ako ISO. Ak vám niekto dá číslo týždňa bez uvedenia systému, predpokladajte ISO — najmä v medzinárodnom alebo európskom kontexte.
Rýchla referencia 2026: ISO týždne 1–10 a 48–53
| ISO Week | Year | Monday | Sunday |
|---|---|---|---|
| W1 | 2026 | Dec 29, 2025 | Jan 4, 2026 |
| W2 | 2026 | Jan 5, 2026 | Jan 11, 2026 |
| W3 | 2026 | Jan 12, 2026 | Jan 18, 2026 |
| W4 | 2026 | Jan 19, 2026 | Jan 25, 2026 |
| W5 | 2026 | Jan 26, 2026 | Feb 1, 2026 |
| W6 | 2026 | Feb 2, 2026 | Feb 8, 2026 |
| W7 | 2026 | Feb 9, 2026 | Feb 15, 2026 |
| W8 | 2026 | Feb 16, 2026 | Feb 22, 2026 |
| W9 | 2026 | Feb 23, 2026 | Mar 1, 2026 |
| W10 | 2026 | Mar 2, 2026 | Mar 8, 2026 |
| ... | |||
| W48 | 2026 | Nov 23, 2026 | Nov 29, 2026 |
| W49 | 2026 | Nov 30, 2026 | Dec 6, 2026 |
| W50 | 2026 | Dec 7, 2026 | Dec 13, 2026 |
| W51 | 2026 | Dec 14, 2026 | Dec 20, 2026 |
| W52 | 2026 | Dec 21, 2026 | Dec 27, 2026 |
| W53 | 2026 | Dec 28, 2026 | Jan 3, 2027 |
Všimnite si, že W1 v 2026 začína 29. decembra 2025. A W53 v 2026 končí 3. januára 2027 — 2026 je 53-týždňový rok.
Zhrnutie najčastejších chýb
Chýba rok. „Týždeň 8“ je nejednoznačný. Vždy používajte formát 2026-W08 alebo ekvivalent.
Používanie kalendárneho roka namiesto ISO roka týždňa. 29. december 2025 je v ISO týždni 1 roku 2026, nie 2025. Ak ho uložíte pod 2025, skončí v nesprávnom koši.
Predpoklad, že týždeň 1 začína 1. januára. V mnohých rokoch začína 29., 30. alebo 31. decembra. Ak potrebujete, aby 1. január bol vždy v týždni 1, používate US systém, nie ISO.
Off-by-one pri vzorci s pondelkom. Kotva 4. január je kľúčová — nie 1. január (ktorý môže patriť do posledného týždňa predchádzajúceho ISO roka). Kotvenie na 1. január dáva zlé výsledky v rokoch, keď 1. január padne neskoro v týždni.
Netestovanie dátumov na prelome rokov. Akýkoľvek kód na prácu s dátumami by mal byť otestovaný na 28.–31. decembra a 1.–4. januára. Práve v týchto dňoch žijú všetky okrajové prípady.
Použite ISO Week Number Calculator na vyhľadanie dátumového rozsahu pre ľubovoľné číslo týždňa alebo si pozrite current week number a dnešný ISO rozsah.

