ISO-hét számok magyarázata — miért van január 1 néha az 52. hétben?
Sokan azt feltételezik, hogy az 1. hét január első hete. Nem az — legalábbis nem az ISO 8601 szerint, amelyet Európa nagy részén, a gyártásban, műsorszórásban és világszerte az üzleti szoftverekben használnak.
Az ISO 8601 szerint az 1. hét az az hét, amely tartalmazza az év első csütörtökét. Ez az egyetlen szabály mindent meghatároz, beleértve azokat az eredményeket is, amelyek elsőre „rossznak” tűnnek, amíg meg nem érted a logikát.
Az ISO-hétszámozás négy szabálya
Minden a következő négy tényből következik:
1. A hetek mindig hétfőtől vasárnapig tartanak 2. Az 1. hét az a hét, amely tartalmazza az év első csütörtökét 3. Egy évben 52 vagy 53 hét van 4. A hét száma ahhoz az évhez tartozik, amelyikben a csütörtök van — nem ahhoz, amelyikben a hétfő
Az utolsó pont szokott a leginkább megtévesztő lenni. Egy hét „éve” attól függ, hogy melyik évbe esik a csütörtök, nem attól, hogy a napok többsége melyik évben van.
Miért pont a csütörtök?
A csütörtök-szabály azért létezik, mert garantálja, hogy az 1. hétben mindig legalább 4 nap legyen az új évből. Ezzel egyenértékű megfogalmazás: az 1. hét az a hét, amely tartalmazza január 4-ét (mert január 4-e mindig az első hétben van e definíció szerint).
Gyakorlati következmény: ha január 1 péntekre, szombatra vagy vasárnapra esik, akkor az a megelőző év utolsó hetéhez tartozik — mert az adott hét csütörtöke még decemberben van.
Az évhatár-esetek
Itt válik igazán érdekessé:
Január 1 eshet a megelőző év 52. vagy 53. hetébe.
Ha január 1 péntek: a hét csütörtöke december 31. A hét az előző évhez tartozik. Ha január 1 szombat: a csütörtök december 30. Ugyanígy — az előző év hete. Ha január 1 vasárnap: a csütörtök december 28. Még mindig az előző év.
Ezekben az esetekben január 1, 2 vagy akár január 3 is viselheti az előző év hetének számát.
December 31 eshet a következő év 1. hetébe.
Ha december 31 hétfőre, keddre vagy szerdára esik: a hét csütörtöke már januárban van. A hét a következő évhez tartozik.
| Január 1 napja | Az 1. hét kezdete | Jan 1 melyik hétben van |
|---|---|---|
| Hétfő | január 1 | 1 |
| Kedd | december 31 | 1 |
| Szerda | december 30 | 1 |
| Csütörtök | december 29 | 1 |
| Péntek | január 4 | 52 vagy 53 (előző év) |
| Szombat | január 3 | 52 vagy 53 (előző év) |
| Vasárnap | január 2 | 52 vagy 53 (előző év) |
Hány hét van egy évben?
A legtöbb évben 52 hét van. Néhányban 53.
Egy év akkor kap 53. hetet, ha január 1 csütörtökre esik (bármely évben), vagy ha január 1 szerdára esik szökőévben. A évek körülbelül 71%-ában 52 hét van; nagyjából 29%-ában 53. Az elmúlt és a közeljövőben 53 hetes évek: 2004, 2009, 2015, 2020, 2026, 2032.
ISO hetek vs amerikai jellegű hétszámozás
Az amerikai rendszer — és az azt követő rendszerek — máshogy definiálják az 1. hetet: egyszerűen az a hét, amely tartalmazza január 1-et. A hetek vasárnaptól szombatig tartanak.
Ez eltérő eredményeket ad, főleg évhatárok körül:
| Dátum | ISO hét | US hét |
|---|---|---|
| 2023. január 1. (vasárnap) | 2022 52. hete | 2023 1. hete |
| 2024. január 1. (hétfő) | 2024 1. hete | 2024 1. hete |
| 2024. december 31. (kedd) | 2025 1. hete | 2024 53. hete |
Az SQL Server DATEPART(week, ...) alapértelmezetten az amerikai rendszert használja. Az Excel WEEKNUM() alapból US-stílusú. A PostgreSQL EXTRACT(week ...) ISO szerint működik. A Python isocalendar() ISO. A JavaScriptben nincs beépített — manuálisan kell számolni vagy könyvtárat használni.
Ez az eltérés finom hibákat okoz, amikor a hetek száma rendszerek között „átmegy”. Ha egy Excelben készült riportot összevetnek egy PostgreSQL lekérdezés adataival december/január környékén, a hét számok eltérhetnek.
Az ISO-hét számok gyakorlati használata
Gyártás és ellátási láncok
Az ISO-hetek a termelési tervezés közös nyelve. Egy „W14” gyártási ütemezés ugyanazt jelenti egy német beszállítónak, egy holland logisztikai csapatnak és egy brit minőségellenőrzési riportnak. A hét száma egyértelmű; a naptári dátumok nem mindig.
Műsorszórás
TV-nézettség, reklámidősávok és műsorrend gyakran hét szám szerint szerveződik. Egy „1. heti” kampány az ISO 1. hét hétfőjén indul, kész. Ez lehetővé teszi, hogy nemzetközi produkciók időzónák és naptárak között is összehangoljanak dátum-konvertálás nélkül.
Projekttervezés
Sok vállalati projekt-eszköz (SAP, Jira, Microsoft Project) ISO-hét számokban mutatja az idővonalat. Sprintciklusok, szállítási ablakok és kapacitástervezés is profitál a következetes, egész évben érvényes számozásból, amely nem „nullázódik” a hét közepén.
Pénzügyi riportolás
Egyes cégek negyedéves jelentéseiket ISO-hetekhez igazítják, nem naptári hónapokhoz, mert az ISO-hetek egyenlő hosszúságú riportidőszakokat adnak. A 13 hetes negyedévek (4+4+5 hetes ciklusok) gyakoriak a kiskereskedelemben.
Mezőgazdaság és élelmiszertermelés
Egy csomagolt terméken a „minőségét megőrzi: 32. hét” ISO-számozást követhet. Az év-hét formátum YYYY-Www (például 2024-W32) érvényes ISO 8601 dátumformátum, és megjelenik címkéken, gyártási tételeken és szavatossági nyilvántartásokban.
ISO hét dátumok írása
Az ISO 8601 meghatároz egy szabványos jelölést a hét-dátumokra:
YYYY-Www-D
Ahol:
YYYYaz ISO hét éve (ami évhatároknál eltérhet a naptári évtől)Wwwa hét száma, nullával kiegészítve, W előtaggalDa nap sorszáma: 1 = hétfő, 7 = vasárnap
Példák:
2024-W01-1= 2024 ISO 1. hét hétfője (2024. január 1.)2024-W53-5= 2024 ISO 53. hét péntekje (2025. január 3.)2026-W01-4= 2026 ISO 1. hét csütörtöke (2026. január 1.)
Figyeld meg, hogy a 2024-W53-5 a 2024-es hét-évhez tartozik, még ha a dátum 2025 januárjában van is. Ez az ISO hét-év, nem a naptári év.
ISO hét számok kiszámítása
A képlet jól definiált, de nem triviális hibamentesen megvalósítani. Az általános megközelítés:
1. Találd meg annak a hétnek a csütörtökét, amelyben a dátumod van (napokat hozzáadva vagy levonva juss csütörtökre) 2. Határozd meg, melyik évhez tartozik az a csütörtök 3. Számold meg, hány hét telt el az adott év január 4-e óta a csütörtökig (mert január 4-e mindig az 1. hétben van)
Gyakorlatban érdemes a beépített funkciókat használni:
// Python — returns (year, week, weekday)
from datetime import date
date(2024, 12, 31).isocalendar()
# IsoCalendarDate(year=2025, week=1, weekday=2)
// JavaScript — no built-in, manual calculation
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');
-- Returns 1 (ISO week 1 of 2025)
// SQL Server — ISOWK is ISO-compliant
SELECT DATEPART(isowk, '2024-12-31');
Gyakori hibák
A naptári év használata az ISO hét-év helyett. 2024. december 31. a 2025 1. hetében van, nem 2024 53. hetében. Ha „2024-W01”-nek címkézed, rossz év.
Feltételezni, hogy az 1. hét január 1-jén kezdődik. Nem. Január 1 gyakran nem az 1. hét része.
US és ISO hetek keverése ugyanabban a riportban. Ha az egyik forrás ISO-t, a másik US-stílust használ, december/január környékén csendes eltérések lesznek, amelyeket nehéz debugolni.
Off-by-one a hét számlálásban. Néhány implementáció 0. hetet ad vissza azokra a korai januári dátumokra, amelyek az előző évhez tartoznak. A helyes válasz az előző év megfelelő hete, nem 0.
Mit jelent a „W01” a gyakorlatban?
A legegyszerűbb megjegyezni: az ISO 1. hét az év első olyan hete, amelynek napjai közül többség az új évben van. A többség itt legalább 4 napot jelent a 7-ből.
Egy decembert és januárt átfedő hét ahhoz az évhez tartozik, amelyik több napot „kap”. A csütörtök a hétfőtől induló 7 napos hét középső napja, ezért csütörtök a döntő.
Bármely dátum heti számának ellenőrzése
Az ISO hét szám kalkulátor megmutatja bármely dátum ISO-heti számát, beleértve a hét teljes hétfő–vasárnap tartományát és a teljes éves naptárt. A mai ISO-heti számot közvetlenül is megnézheted a jelenlegi hét szám oldalon.