Пояснення номерів тижнів ISO — чому 1 січня іноді є тижнем 52

Більшість людей вважають, що тиждень 1 — це перший тиждень січня. Це не так — принаймні згідно з ISO 8601, міжнародним стандартом, який використовується по всій Європі, у виробництві, мовленні та бізнес-програмному забезпеченні по всьому світу.

Згідно з ISO 8601, тиждень 1 — це тиждень, що містить перший четвер року. Це єдине правило визначає все, включаючи деякі результати, які здаються неправильними, доки ви не зрозумієте логіку.

Чотири правила нумерації тижнів ISO

Все випливає з чотирьох фактів:

1. Тижні завжди тривають з понеділка по неділю 2. Тиждень 1 — це тиждень, що містить перший четвер року 3. У році 52 або 53 тижні 4. Номер тижня належить до року, що містить його четвер, а не його понеділок

Останній пункт — той, на якому люди спотикаються. Рік, до якого належить тиждень, визначається тим, де припадає його четвер, а не тим, яка більшість днів.

Чому четвер?

Правило четверга існує тому, що воно гарантує, що тиждень 1 завжди містить щонайменше 4 дні нового року. Це також еквівалентно твердженню: тиждень 1 — це тиждень, що містить 4 січня (оскільки 4 січня завжди є в першому тижні за цим визначенням).

Практичний ефект: якщо 1 січня припадає на п'ятницю, суботу або неділю, воно є частиною останнього тижня попереднього року, оскільки четвер того тижня — в грудні.

Випадки на межі року

Ось де стає цікаво:

1 січня може потрапити в тиждень 52 або 53 попереднього року.

Якщо 1 січня — п'ятниця: четвер того тижня — 31 грудня. Тиждень належить минулому року. Якщо 1 січня — субота: четвер — 30 грудня. Те саме — тиждень минулого року. Якщо 1 січня — неділя: четвер — 28 грудня. Все одно минулий рік.

У цих випадках 1, 2 або навіть 3 січня можуть мати номер тижня попереднього року.

31 грудня може потрапити в тиждень 1 наступного року.

Якщо 31 грудня — понеділок, вівторок або середа: четвер того тижня — в січні. Тиждень належить наступному року.

День 1 січняТиждень 1 починається1 січня в тижні
Понеділок1 січня1
Вівторок31 грудня1
Середа30 грудня1
Четвер29 грудня1
П'ятниця4 січня52 або 53 попереднього року
Субота3 січня52 або 53 попереднього року
Неділя2 січня52 або 53 попереднього року

Скільки тижнів у році?

У більшості років 52 тижні. У деяких — 53.

Рік отримує 53-й тиждень, коли 1 січня припадає на четвер (будь-який рік), або коли 1 січня припадає на середу у високосному році. Приблизно 71% років мають 52 тижні; приблизно 29% — 53.

Роки з 53 тижнями в недавньому минулому та найближчому майбутньому: 2004, 2009, 2015, 2020, 2026, 2032.

Тижні ISO порівняно з нумерацією тижнів у стилі США

Система США — і системи, які її дотримуються, — визначають тиждень 1 інакше: це просто тиждень, що містить 1 січня. Тижні тривають із неділі по суботу.

Це дає різні результати, особливо поблизу меж років:

ДатаТиждень ISOТиждень США
1 січня 2023 (неділя)Тиждень 52, 2022Тиждень 1, 2023
1 січня 2024 (понеділок)Тиждень 1, 2024Тиждень 1, 2024
31 грудня 2024 (вівторок)Тиждень 1, 2025Тиждень 53, 2024

DATEPART(week, ...) SQL Server за замовчуванням використовує систему США. WEEKNUM() Excel за замовчуванням — у стилі США. EXTRACT(week ...) PostgreSQL слідує ISO. isocalendar() Python — ISO. У JavaScript немає вбудованого — ви обчислюєте вручну або використовуєте бібліотеку.

Ця невідповідність спричиняє непомітні помилки, коли номери тижнів переходять між системами. Якщо звіт, створений в Excel, порівнюється з даними з запиту PostgreSQL поблизу грудня або січня, номери тижнів можуть не збігатися.

Практичне застосування номерів тижнів ISO

Виробництво та ланцюги постачання

Тижні ISO — це спільна мова виробничого планування. Заводський розклад на «W14» означає одне й те саме для постачальника в Німеччині, логістичної команди в Нідерландах і звіту про контроль якості у Великобританії. Номер тижня однозначний; календарні дати — ні.

Мовлення

Рейтинги телебачення, рекламні слоти та розклади мовлення організовані за номерами тижнів. Кампанія «Тиждень 1» починається в понеділок тижня ISO 1, і крапка. Це дозволяє міжнародним виробництвам координуватися в різних часових поясах і календарях без конвертації дат.

Планування проєктів

Багато корпоративних інструментів проєктування (SAP, Jira, Microsoft Project) відображають часові шкали в номерах тижнів ISO. Цикли планування спринтів, вікна доставки та планування потужностей — усі вони виграють від послідовної системи нумерації протягом усього року, яка не скидається в середині тижня.

Фінансова звітність

Деякі компанії звітують про квартальні результати відповідно до тижнів ISO, а не календарних місяців, оскільки тижні ISO дають рівні звітні періоди. Квартали 13 тижнів (цикли 4+4+5 тижнів) поширені в роздрібній торгівлі.

Сільське господарство та харчове виробництво

«Найкраще до Тижня 32» на упакованому продукті дотримується нумерації ISO. Формат тиждень-рік РРРР-Www (наприклад, 2024-W32) є дійсним форматом дати ISO 8601 і з'являється на маркуванні, записах партій та відстеженні терміну зберігання в харчовій промисловості.

Написання дат тижнів ISO

ISO 8601 визначає стандартне позначення для дат тижнів:

РРРР-Www-Д

Де:

  • РРРРрік тижня ISO (який може відрізнятися від календарного року на межах)
  • Www — номер тижня, доповнений нулями, з префіксом W
  • Д — номер дня: 1 = понеділок, 7 = неділя

Приклади:

  • 2024-W01-1 = понеділок тижня ISO 1, 2024 (1 січня 2024)
  • 2024-W53-5 = п'ятниця тижня ISO 53, 2024 (3 січня 2025)
  • 2026-W01-4 = четвер тижня ISO 1, 2026 (1 січня 2026)

Зверніть увагу, що 2024-W53-5 належить до тижневого року 2024, навіть якщо дата — в січні 2025. Це рік тижня ISO, а не календарний рік.

Обчислення номерів тижнів ISO

Формула чітко визначена, але не тривіальна для правильної реалізації. Загальний підхід:

1. Знайдіть четвер тижня, що містить вашу дату (додайте або відніміть дні, щоб потрапити на четвер) 2. Визначте, до якого року належить цей четвер 3. Порахуйте, скільки тижнів від 4 січня того року до вашого четверга (оскільки 4 січня завжди в тижні 1)

На практиці використовуйте вбудований засіб вашої мови:

// Python — повертає (рік, тиждень, день тижня)
from datetime import date
date(2024, 12, 31).isocalendar()
# IsoCalendarDate(year=2025, week=1, weekday=2)

// JavaScript — без вбудованого, ручний розрахунок
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');
-- Повертає 1 (тиждень ISO 1 2025)

// SQL Server — ISOWK відповідає ISO
SELECT DATEPART(isowk, '2024-12-31');

Поширені помилки

Використання календарного року замість року тижня ISO. 31 грудня 2024 — в тижні 1 2025, а не в тижні 53 2024. Якщо позначити це як «2024-W01», рік буде неправильним.

Припущення, що тиждень 1 починається 1 січня. Ні. 1 січня часто не є в тижні 1.

Змішування номерів тижнів США та ISO в одному звіті. Якщо одне джерело даних використовує ISO, а інше — стиль США, ви отримаєте непомітні невідповідності наприкінці року, які важко налагодити.

Помилка на одиницю в підрахунку тижнів. Деякі реалізації повертають тиждень 0 для дат на початку січня, які належать до попереднього року. Правильна відповідь — номер тижня з календаря попереднього року, а не 0.

Що «W01» насправді означає на практиці

Найпростіший спосіб запам'ятати: тиждень ISO 1 — це перший тиждень року, що має більшість своїх днів у новому році. Більшість означає щонайменше 4 з 7 днів.

Тиждень, що охоплює грудень і січень, належатиме до того року, який отримує найбільше днів. Четвер — середній день 7-денного тижня, що починається в понеділок, ось чому четвер відіграє роль вирішального арбітра.

Перевірка номера тижня для будь-якої дати

Калькулятор номера тижня ISO показує номер тижня для будь-якої дати, включаючи повний діапазон понеділок–неділя того тижня та повний річний календар. Ви також можете перевірити поточний номер тижня ISO безпосередньо на сторінці поточного номера тижня.

Схожі статті