ISO nedēļu numuri skaidroti — kāpēc 1. janvāris dažreiz ir 52. nedēļā

Lielākā daļa cilvēku pieņem, ka 1. nedēļa ir janvāra pirmā nedēļa. Tā nav — vismaz ne pēc ISO 8601, starptautiskā standarta, ko izmanto lielākajā daļā Eiropas, ražošanā, apraidē un biznesa programmatūrā visā pasaulē.

Saskaņā ar ISO 8601, 1. nedēļa ir nedēļa, kurā ir gada pirmā ceturtdiena. Šis viens noteikums nosaka visu, tostarp dažus rezultātus, kas šķiet “nepareizi”, līdz saprotat loģiku.

Četri ISO nedēļu numerācijas noteikumi

Viss izriet no četriem faktiem:

1. Nedēļas vienmēr ir no pirmdienas līdz svētdienai 2. 1. nedēļa ir nedēļa, kurā ir gada pirmā ceturtdiena 3. Gadā ir vai nu 52, vai 53 nedēļas 4. Nedēļas numurs pieder tam gadam, kurā ir tās ceturtdiena — nevis pirmdiena

Tieši pēdējais punkts visbiežāk samulsina. Tas, kuram gadam pieder nedēļa, tiek noteikts pēc tā, kurā gadā iekrīt tās ceturtdiena, nevis pēc tā, kurā gadā ir vairākums dienu.

Kāpēc ceturtdienas?

Ceturtdienas noteikums pastāv tāpēc, ka tas garantē: 1. nedēļā vienmēr ir vismaz 4 dienas no jaunā gada. Tas ir arī ekvivalents apgalvojumam: 1. nedēļa ir nedēļa, kurā ir 4. janvāris (jo 4. janvāris pēc šīs definīcijas vienmēr ir 1. nedēļā).

Praktiskais efekts: ja 1. janvāris iekrīt piektdienā, sestdienā vai svētdienā, tas ir daļa no iepriekšējā gada pēdējās nedēļas — jo tās nedēļas ceturtdiena ir decembrī.

Gadumijas gadījumi

Te kļūst interesanti:

1. janvāris var būt 52. vai 53. nedēļā iepriekšējā gadā.

Ja 1. janvāris ir piektdienā: šīs nedēļas ceturtdiena ir 31. decembris. Nedēļa pieder iepriekšējam gadam. Ja 1. janvāris ir sestdienā: ceturtdiena ir 30. decembris. Tāpat — iepriekšējais gads. Ja 1. janvāris ir svētdienā: ceturtdiena ir 28. decembris. Joprojām iepriekšējais gads.

Šādos gadījumos 1., 2. vai pat 3. janvārim var būt iepriekšējā gada nedēļas numurs.

31. decembris var būt 1. nedēļā nākamajā gadā.

Ja 31. decembris ir pirmdienā, otrdienā vai trešdienā: šīs nedēļas ceturtdiena ir janvārī. Nedēļa pieder nākamajam gadam.

1. janvāra dienaKad sākas 1. nedēļa1. janvāris ir nedēļā
Pirmdiena1. janvāris1
Otrdiena31. decembris1
Trešdiena30. decembris1
Ceturtdiena29. decembris1
Piektdiena4. janvāris52 vai 53 iepriekšējā gadā
Sestdiena3. janvāris52 vai 53 iepriekšējā gadā
Svētdiena2. janvāris52 vai 53 iepriekšējā gadā

Cik nedēļu ir gadā?

Lielākajā daļā gadu ir 52 nedēļas. Dažos ir 53.

Gads iegūst 53. nedēļu, ja 1. janvāris iekrīt ceturtdienā (jebkurā gadā) vai ja 1. janvāris iekrīt trešdienā garajā gadā. Aptuveni 71% gadu ir 52 nedēļas; ap 29% ir 53.

Gadi ar 53 nedēļām nesenā pagātnē un tuvākajā nākotnē: 2004, 2009, 2015, 2020, 2026, 2032.

ISO nedēļas pret ASV stila nedēļu numerāciju

ASV sistēma — un sistēmas, kas tai seko — 1. nedēļu definē citādi: tā ir vienkārši nedēļa, kurā ir 1. janvāris. Nedēļas ir no svētdienas līdz sestdienai.

Tas dod atšķirīgus rezultātus, īpaši gada robežās:

DatumsISO nedēļaASV nedēļa
2023. gada 1. janvāris (svētdiena)52. nedēļa, 20221. nedēļa, 2023
2024. gada 1. janvāris (pirmdiena)1. nedēļa, 20241. nedēļa, 2024
2024. gada 31. decembris (otrdiena)1. nedēļa, 202553. nedēļa, 2024

SQL Server DATEPART(week, ...) pēc noklusējuma ir ASV sistēma. Excel WEEKNUM() pēc noklusējuma ir ASV stils. PostgreSQL EXTRACT(week ...) seko ISO. Python isocalendar() ir ISO. JavaScript iebūvēta nav — to rēķina manuāli vai izmanto bibliotēku.

Šī neatbilstība rada smalkas kļūdas, kad nedēļu numuri pārvietojas starp sistēmām. Ja Excel ģenerētu atskaiti salīdzina ar datiem no PostgreSQL vaicājuma decembra vai janvāra tuvumā, nedēļu numuri var nesakrist.

ISO nedēļu numuru praktiskie lietojumi

Ražošana un piegādes ķēdes

ISO nedēļas ir ražošanas plānošanas “kopējā valoda”. Rūpnīcas grafiks “W14” nozīmē vienu un to pašu piegādātājam Vācijā, loģistikas komandai Nīderlandē un kvalitātes atskaitē Apvienotajā Karalistē. Nedēļas numurs ir nepārprotams; kalendāra datumi — ne vienmēr.

Apraide

TV reitingi, reklāmas kampaņas un apraides grafiki tiek organizēti pēc nedēļas numura. “1. nedēļas” kampaņa sākas ISO 1. nedēļas pirmdienā, un viss. Tas ļauj starptautiskām komandām koordinēties starp laika joslām un kalendāriem bez datumu pārrēķiniem.

Projekta plānošana

Daudzi uzņēmumu rīki (SAP, Jira, Microsoft Project) rāda laika līnijas ISO nedēļu numuros. Sprintu plānošana, piegādes logi un kapacitātes plānošana iegūst no konsekventas numerācijas, kas nemainās gadumijā “pa vidu nedēļai”.

Finanšu atskaites

Daži uzņēmumi ceturkšņu atskaites pielāgo ISO nedēļām, nevis kalendāra mēnešiem, jo ISO nedēļas dod vienāda garuma periodus. Mazumtirdzniecībā ir izplatīti 13 nedēļu ceturkšņi (4+4+5 nedēļu cikli).

Lauksaimniecība un pārtikas ražošana

“Ieteicams līdz 32. nedēļai” uz iepakotas produkcijas seko ISO numerācijai. Nedēļas gada formāts YYYY-Www (piem., 2024-W32) ir derīgs ISO 8601 datuma formāts un parādās marķējumā, partiju uzskaitē un derīguma termiņa izsekošanā pārtikas nozarē.

ISO nedēļas datumu pieraksts

ISO 8601 definē standarta pierakstu nedēļu datumiem:

YYYY-Www-D

Kur:

  • YYYY ir ISO nedēļas gads (tas robežās var atšķirties no kalendārā gada)
  • Www ir nedēļas numurs ar nullēm priekšā un burtu W
  • D ir dienas numurs: 1 = pirmdiena, 7 = svētdiena

Piemēri:

  • 2024-W01-1 = ISO 1. nedēļas pirmdiena 2024. gadā (2024. gada 1. janvāris)
  • 2024-W53-5 = ISO 53. nedēļas piektdiena 2024. gadā (2025. gada 3. janvāris)
  • 2026-W01-4 = ISO 1. nedēļas ceturtdiena 2026. gadā (2026. gada 1. janvāris)

Ņemiet vērā, ka 2024-W53-5 pieder ISO nedēļas gadam 2024, lai gan datums ir 2025. gada janvārī. Tas ir ISO nedēļas gads, nevis kalendārais gads.

ISO nedēļas numuru aprēķināšana

Formula ir labi definēta, bet nav triviāli to ieviest bez kļūdām. Vispārīgā pieeja:

1. Atrodi tās nedēļas ceturtdienu, kurā ir tavs datums (pievieno vai atņem dienas, līdz nonāc līdz ceturtdienai) 2. Nosaki, kuram gadam šī ceturtdiena pieder 3. Saskaiti, cik nedēļu ir no 4. janvāra šajā gadā līdz šai ceturtdienai (jo 4. janvāris vienmēr ir 1. nedēļā)

Praksē izmanto valodas iebūvēto funkciju:

// 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');

Biežākās kļūdas

Kalendārā gada izmantošana ISO nedēļas gada vietā. 2024. gada 31. decembris ir 2025. gada 1. nedēļā, nevis 2024. gada 53. nedēļā. Ja tu to atzīmē kā “2024-W01”, gads ir nepareizs.

Pieņēmums, ka 1. nedēļa sākas 1. janvārī. Tā nav. 1. janvāris bieži vien nav 1. nedēļā.

ASV un ISO nedēļu numuru jaukšana vienā atskaitē. Ja viens datu avots izmanto ISO un cits — ASV stilu, gada beigās radīsies klusas neatbilstības, kuras ir grūti atkļūdot.

Kļūda par vienu nedēļu (off-by-one). Dažas ieviešanas agrā janvārī atgriež 0. nedēļu datumiem, kuri pieder iepriekšējam gadam. Pareizā atbilde ir iepriekšējā gada nedēļas numurs, nevis 0.

Ko praksē nozīmē “W01”

Vienkāršākais veids, kā to atcerēties: ISO 1. nedēļa ir pirmā nedēļa gadā, kurā jaunajam gadam ir vairākums dienu. “Vairākums” nozīmē vismaz 4 no 7 dienām.

Nedēļa, kas pārklājas starp decembri un janvāri, pieder tam gadam, kuram ir vairāk dienu. Ceturtdiena ir viduspunkta diena 7 dienu nedēļā, kas sākas pirmdienā, tāpēc ceturtdiena darbojas kā izšķirošais kritērijs.

Kā pārbaudīt jebkura datuma nedēļas numuru

ISO nedēļas numura kalkulators parāda nedēļas numuru jebkuram datumam, tostarp pilnu pirmdienas–svētdienas intervālu un visa gada kalendāru. Varat arī pārbaudīt šodienas ISO nedēļas numuru tieši pašreizējās nedēļas numura lapā.