ISO týždne vysvetlené — Prečo január 1 niekedy padá na týždeň 52
Väčšina ľudí si myslí, že týždeň 1 je prvý týždeň januára. Nie je — aspoň nie podľa ISO 8601, medzinárodného štandardu, ktorý sa používa v celej Európe, v priemysle, televízii a v obchodnom softvéri na celom svete.
Podľa ISO 8601 je týždeň 1 ten týždeň, ktorý obsahuje prvý štvrtok roka. Toto jediné pravidlo určuje všetko vrátane niektorých výsledkov, ktoré sa zdajú nesprávne, kým nechápete logiku.
Štyri pravidlá ISO očíslovania týždňov
Všetko vychádza zo štyroch faktov:
1. Týždne vždy bežia od pondelka do nedele 2. Týždeň 1 je týždeň obsahujúci prvý štvrtok roka 3. Rok má buď 52 alebo 53 týždňov 4. Číslo týždňa patrí roku, ktorý obsahuje jeho štvrtok — nie pondelok
Posledný bod je ten, ktorý väčšinu ľudí zmätie. Rok, do ktorého týždeň patrí, sa určuje podľa toho, kde padá jeho štvrtok, nie podľa toho, ako sú rozdelené ostatné dni.
Prečo štvrtky?
Pravidlo štvrtka existuje, pretože garantuje, že týždeň 1 vždy obsahuje aspoň 4 dni nového roka. Je to tiež ekvivalentné tomu povedať: týždeň 1 je týždeň obsahujúci január 4 (pretože január 4 je vždy v prvom týždni podľa tejto definície).
Praktický dôsledok: ak január 1 padá na piatok, sobotu alebo nedeľu, je súčasťou posledného týždňa predchádzajúceho roka — pretože štvrtok toho týždňa je v decembri.
Hraničné prípady na rozsahu rokov
Toto je zaujímavá časť:
Január 1 môže padnúť na týždeň 52 alebo 53 predchádzajúceho roka.
Ak je január 1 piatok: štvrtok toho týždňa je december 31. Týždeň patrí minulému roku. Ak je január 1 sobota: štvrtok je december 30. Rovnako — týždeň minulého roku. Ak je január 1 nedeľa: štvrtok je december 28. Stále minulý rok.
V týchto prípadoch môžu január 1, 2 alebo dokonca január 3 niesť číslo týždňa z predchádzajúceho roku.
December 31 môže padnúť na týždeň 1 nasledujúceho roka.
Ak je december 31 pondelok, utorok alebo streda: štvrtok toho týždňa je v januári. Týždeň patrí nasledujúcemu roku.
| Deň január 1 | Týždeň 1 začína | Jan 1 je v týždni |
|---|---|---|
| Pondelok | január 1 | 1 |
| Utorok | december 31 | 1 |
| Streda | december 30 | 1 |
| Štvrtok | december 29 | 1 |
| Piatok | január 4 | 52 alebo 53 z predch. roka |
| Sobota | január 3 | 52 alebo 53 z predch. roka |
| Nedeľa | január 2 | 52 alebo 53 z predch. roka |
Koľko týždňov má rok?
Väčšina rokov má 52 týždňov. Niektoré majú 53.
Rok dostane 53. týždeň, keď január 1 padá na štvrtok (v ktoromkoľvek roku) alebo keď január 1 padá na stredu v priestupnom roku. Približne 71 % rokov má 52 týždňov; zhruba 29 % má 53.
Roky s 53 týždňami v nedávnej minulosti a blízkej budúcnosti: 2004, 2009, 2015, 2020, 2026, 2032.
ISO týždne verzus americký systém očíslovania týždňov
Americký systém — a systémy, ktoré ho nasledujú — definujú týždeň 1 inak: je to jednoducho týždeň obsahujúci január 1. Týždne bežia od nedele do soboty.
To produkuje iné výsledky, najmä na hraniciach rokov:
| Dátum | ISO týždeň | US týždeň |
|---|---|---|
| január 1, 2023 (nedeľa) | Týždeň 52, 2022 | Týždeň 1, 2023 |
| január 1, 2024 (pondelok) | Týždeň 1, 2024 | Týždeň 1, 2024 |
| december 31, 2024 (utorok) | Týždeň 1, 2025 | Týždeň 53, 2024 |
DATEPART(week, ...) SQL Servera sa štandardne používa s americkým systémom. WEEKNUM() Excelu sa štandardne používa americkým štýlom. PostgreSQL EXTRACT(week ...) je ISO. Python isocalendar() je ISO. JavaScript nemá vstavaný — vypočítate si ho manuálne alebo použijete knižnicu.
Táto nezrovnalosť spôsobuje jemné chyby, keď sa čísla týždňov presúvajú medzi systémami. Ak sa správa vygenerovaná v Exceli porovnáva s údajmi z PostgreSQL dotazu v blízkosti decembra alebo januára, čísla týždňov sa môžu líšiť.
Praktické použitie ISO týždňov
Výroba a dodávateľský reťazec
ISO týždne sú univerzálnym jazykom plánovania výroby. Rozvrh továrne na „W14" znamená to isté pre dodávateľa v Nemecku, logistický tím v Holandsku a správu kontroly kvality v Spojenom kráľovstve. Číslo týždňa je jednoznačné; kalendárne dátumy nie sú.
Vysielanie
Údaje o televíznych divákoch, reklamenú miesta a rozvrh vysielania sú organizované podľa čísla týždňa. Kampaň „Week 1" začína v pondelok ISO týždňa 1, bez výhrad. To umožňuje medzinárodným projektom koordinovať sa naprieč časovými pásmami a kalendármi bez konverzie dátumov.
Plánovanie projektov
Mnohé korporátne nástroje na plánovanie projektov (SAP, Jira, Microsoft Project) zobrazujú časové osi podľa ISO čísel týždňov. Plánovanie sprintov, doručovacie okná a kapacitné plánovanie všetky profitujú z konzistentného systému očíslovania na celý rok, ktorý sa neobnovuje v polovici týždňa.
Finančné hlásenie
Niektoré spoločnosti hlásia štvrťročné výsledky zladené s ISO týždňami skôr než s kalendárnymi mesiacmi, pretože ISO týždne poskytujú obdobia rovnakej dĺžky. 13-týždňové štvrťroky (4+4+5 týždňové cykly) sú bežné v maloobchode.
Poľnohospodárstvo a výroba potravín
Údaj „Najlepšie spotrebovať do týždňa 32" na balenom výrobku nasleduje ISO očíslovania. Formát týždňa a roka YYYY-Www (napríklad 2024-W32) je platný formát dátumu podľa ISO 8601 a objavuje sa na označení, záznamoch dávok a sledovaní trvanlivosti v celej potravinárskom priemysle.
Zápis ISO dátumov týždňov
ISO 8601 definuje štandardný zápis pre dátumy týždňov:
YYYY-Www-D
Kde:
YYYYje ISO týždeň roka (ktorý sa môže líšiť od kalendárneho roka na hraniciach)Wwwje číslo týždňa doplnené nulami, prefixované s WDje číslo dňa: 1 = pondelok, 7 = nedeľa
Príklady:
2024-W01-1= pondelok ISO týždňa 1, 2024 (január 1, 2024)2024-W53-5= piatok ISO týždňa 53, 2024 (január 3, 2025)2026-W01-4= štvrtok ISO týždňa 1, 2026 (január 1, 2026)
Všimnite si, že 2024-W53-5 patrí roku týždňa 2024, hoci dátum je v januári 2025. Toto je rok ISO týždňa, nie kalendárny rok.
Výpočet ISO čísel týždňov
Vzorec je jasne definovaný, ale jeho správna implementácia nie je triviálna. Všeobecný postup:
1. Nájdite štvrtok týždňa obsahujúceho váš dátum (pridajte alebo odčítajte dni, aby ste sa dostali na štvrtok) 2. Určite, do ktorého roka patrí ten štvrtok 3. Spočítajte, koľko týždňov od januára 4 toho roka do vášho štvrtka (pretože január 4 je vždy v týždni 1)
V praxi použite vstavaný systém vášho jazyka:
// Python — vracia (rok, týždeň, deň v týždni)
from datetime import date
date(2024, 12, 31).isocalendar()
# IsoCalendarDate(year=2025, week=1, weekday=2)
// JavaScript — bez vstavaného, manuálny výpočet
function isoWeek(date) {
const d = new Date(date)
d.setHours(0, 0, 0, 0)
d.setDate(d.getDate() + 3 - (d.getDay() + 6) % 7)
const week1 = new Date(d.getFullYear(), 0, 4)
return 1 + Math.round(((d - week1) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7)
}
// PostgreSQL
SELECT EXTRACT(week FROM DATE '2024-12-31');
-- Vracia 1 (ISO týždeň 1 z roku 2025)
// SQL Server — ISOWK je podľa ISO
SELECT DATEPART(isowk, '2024-12-31');
Časté chyby
Použitie kalendárneho roka namiesto roka ISO týždňa. December 31, 2024 je v týždni 1 roku 2025, nie v týždni 53 roku 2024. Ak ho označíte ako „2024-W01", máte nesprávny rok.
Predpokladanie, že týždeň 1 začína január 1. Nezačína. Január 1 často nie je v týždni 1.
Miešanie amerických a ISO čísel týždňov v tej istej správe. Ak jeden zdroj údajov používa ISO a druhý používa americký štýl, dostanete tiché nezrovnalosti na konci roka, ktoré sú ťažko debugovateľné.
Off-by-one v počítaní týždňov. Niektoré implementácie vracajú týždeň 0 pre dátumy v ranom januári, ktoré patria predchádzajúcemu roku. Správna odpoveď je číslo týždňa z kalendára predchádzajúceho roka, nie 0.
Čo „W01" v praxi znamená
Najjednoduší spôsob, ako si to zapamätať: ISO týždeň 1 je prvý týždeň roka, ktorý má väčšinu svojich dní v novom roku. Väčšina znamená aspoň 4 zo 7 dní.
Týždeň, ktorý sa rozprestiera medzi december a január, bude patriť akémukoľvek roku, ktorý dostane najviac dní. Štvrtok je stredný deň 7-dňového týždňa, ktorý začína pondelkom, takže štvrtok slúži ako rozhodujúci faktor.
Kontrola čísla týždňa ľubovoľného dátumu
Kalkulačka ISO čísla týždňa zobrazuje číslo týždňa pre akýkoľvek dátum, vrátane úplného rozsahu od pondelka do nedele toho týždňa a úplného kalendára roka. Číslo ISO týždňa dnešného dňa si môžete tiež skontrolovať priamo na stránke čísla aktuálneho týždňa.


