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 1Týždeň 1 začínaJan 1 je v týždni
Pondelokjanuár 11
Utorokdecember 311
Stredadecember 301
Štvrtokdecember 291
Piatokjanuár 452 alebo 53 z predch. roka
Sobotajanuár 352 alebo 53 z predch. roka
Nedeľajanuár 252 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átumISO týždeňUS týždeň
január 1, 2023 (nedeľa)Týždeň 52, 2022Týždeň 1, 2023
január 1, 2024 (pondelok)Týždeň 1, 2024Týždeň 1, 2024
december 31, 2024 (utorok)Týždeň 1, 2025Týž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:

  • YYYY je ISO týždeň roka (ktorý sa môže líšiť od kalendárneho roka na hraniciach)
  • Www je číslo týždňa doplnené nulami, prefixované s W
  • D je čí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.

Súvisiace články