आठवडा क्रमांक (Week Number) तारीख-रेंजमध्ये कसा बदलायचा — पूर्ण मार्गदर्शक

कोणी तरी शेड्युल पाठवतो. “W23 मध्ये डिलिव्हरी.” तुम्ही कॅलेंडर उघडता आणि विचार करता: नेमक्या कोणत्या तारखा?

प्रोजेक्ट प्लॅनिंग, उत्पादन, रिटेल आणि लॉजिस्टिक्समध्ये आठवडा क्रमांक सर्वत्र वापरले जातात — पण बहुतेक लोक त्यांना फक्त लेबल म्हणून ओळखतात. आठवडा क्रमांकातून प्रत्यक्ष कॅलेंडर तारखा काढणे अपेक्षेपेक्षा कमी सहज असते, आणि वर्ष-सीमेवरील केस (year boundary) तर अनुभवी डेव्हलपरलाही गोंधळात टाकू शकतात.

हा मार्गदर्शक संपूर्ण रूपांतरण समजावतो: आठवडा क्रमांक → सोमवार, आठवडा क्रमांक → पूर्ण तारीख-रेंज (सोमवार–रविवार), आणि उलट (तारीख → आठवडा क्रमांक). Python, JavaScript, Excel आणि SQL साठी कोडही दिला आहे.

आठवडा क्रमांक नेमका काय सांगतो

काहीही मोजण्याआधी, हा क्रमांक कोणत्या week numbering system मधून आला आहे ते जाणणे गरजेचे आहे.

ISO 8601 (आंतरराष्ट्रीय मानक): Week 1 म्हणजे वर्षातील पहिला गुरुवार ज्या आठवड्यात येतो तो आठवडा. आठवडे सोमवार ते रविवार चालतात. एका वर्षात 52 किंवा 53 ISO आठवडे असतात. महत्त्वाची गोष्ट — ISO “week year” हा कॅलेंडर वर्षापेक्षा वेगळा असू शकतो. डिसेंबरमधील शेवटचे काही दिवस कधी कधी पुढच्या वर्षाच्या Week 1 मध्ये येतात.

US-स्टाईल: Week 1 मध्ये January 1 येतो. आठवडे रविवार–शनिवार किंवा सोमवार–रविवार असू शकतात (टूलवर अवलंबून). January 1 नेहमी Week 1 मध्येच येतो, अपवाद नाही.

या मार्गदर्शकात “week number” म्हणजे, वेगळे सांगितले नाही तर, ISO 8601 गृहित धरले आहे. US-बेस्ड टूलमधून (उदा. Excel चे default WEEKNUM) आलेला week number असेल तर सूत्र वेगळे असते — खालील सेक्शन पहा.

तुम्हाला वर्षही लागते. “Week 23” हा वर्षाशिवाय अर्थहीन आहे. आठवडा क्रमांक नेहमी (year, week) या जोडीने हाताळा. 2025 चा Week 23 हा June 2 रोजी सुरू होतो. 2026 चा Week 23 हा June 1 रोजी सुरू होतो. 2026 चा Week 1 हा 2025 च्या December 29 रोजी सुरू होतो.

मूळ सूत्र: ISO Week Number → सोमवार

प्रत्येक ISO आठवड्याची सुरुवात सोमवारपासून होते. Year Y मधील ISO Week W चा सोमवार (Monday) शोधण्यासाठी:

Monday = Jan 4 of Y + (W - 1) × 7 days - weekday(Jan 4 of Y) + 1

कारण: January 4 हे नेहमी ISO Week 1 मध्ये असते (व्याख्येनुसार). January 4 ज्या आठवड्यात येतो त्या आठवड्याचा सोमवार शोधा, मग (W - 1) आठवडे पुढे जा.

त्याचाच अधिक स्वच्छ पर्याय:

Monday of W1 = Jan 4 of Y - weekday(Jan 4 of Y) + 1
Monday of W  = Monday of W1 + (W - 1) × 7

इथे weekday हे सोमवार=1 ते रविवार=7 (ISO weekday) असे परत करते.

उदाहरण: 2026 चा Week 23

  • January 4, 2026 हा रविवार आहे. ISO weekday = 7.
  • Monday of W1: Jan 4 − 7 + 1 = Dec 29, 2025.
  • Monday of W23: Dec 29, 2025 + 22 × 7 = Dec 29 + 154 days = June 1, 2026.
  • Sunday of W23: June 1 + 6 = June 7, 2026.

2026 चा Week 23 हा June 1 (सोमवार) ते June 7 (रविवार) असा आहे.

वर्ष-सीमेचा सापळा (Year Boundary Trap)

सर्वात सामान्य चूक: Year Y चा Week 1 नेहमी Year Y मध्येच सुरू होतो असे मानणे.

असे नसते.

Week 1 म्हणजे पहिला गुरुवार ज्या आठवड्यात येतो तो आठवडा. तो गुरुवार January च्या सुरुवातीला असला तर Week 1 चा सोमवार मागील वर्षाच्या December मध्ये येऊ शकतो.

उदाहरणे:

ISO WeekYearMondaySunday
W12025December 30, 2024January 5, 2025
W12026December 29, 2025January 4, 2026
W12027January 4, 2027January 10, 2027
W12028January 3, 2028January 9, 2028

2025 चा W1 हा December 2024 मध्ये सुरू होतो. 2026 चा W1 हा December 2025 मध्ये सुरू होतो.

याचा अर्थ:

  • December 29–31, 2025 हे ISO Week 1 of 2026 मध्ये येतात, 2025 मध्ये नाही.
  • कोणी “W1 2026 पर्यंत डिलिव्हरी” म्हणाले, तर डेडलाइन हा December 29, 2025 पासून सुरू होणारा आठवडा आहे.

उलट सापळाही आहे: काही वर्षांमध्ये शेवटचे काही दिवस पुढच्या वर्षाच्या Week 1 मध्ये येतात, सध्याच्या वर्षाच्या शेवटच्या आठवड्यात नाही. आठवडा लेबल करताना ISO week year (Python मध्ये %G, PostgreSQL मध्ये isoyear) वापरा — कॅलेंडर year नाही.

कोणत्याही Week Number साठी पूर्ण तारीख-रेंज

सोमवार कळला की उरलेला आठवडा सोपा:

DayOffset from Monday
Monday+0
Tuesday+1
Wednesday+2
Thursday+3
Friday+4
Saturday+5
Sunday+6

Week W ची तारीख-रेंज: [Monday, Monday + 6 days].

फक्त कामकाजाचे दिवस (Mon–Fri): [Monday, Monday + 4 days].

Python

from datetime import date, timedelta

def iso_week_to_monday(year: int, week: int) -> date:
    # Jan 4 is always in ISO week 1
    jan4 = date(year, 1, 4)
    # Move back to Monday of that week
    week1_monday = jan4 - timedelta(days=jan4.weekday())
    # Step forward to the target week
    return week1_monday + timedelta(weeks=week - 1)

def iso_week_to_range(year: int, week: int) -> tuple[date, date]:
    monday = iso_week_to_monday(year, week)
    sunday = monday + timedelta(days=6)
    return monday, sunday

# Examples
monday, sunday = iso_week_to_range(2026, 23)
print(monday)   # 2026-06-01
print(sunday)   # 2026-06-07

monday, sunday = iso_week_to_range(2026, 1)
print(monday)   # 2025-12-29  ← note: starts in 2025
print(sunday)   # 2026-01-04

Python मध्ये उलट (तारीख → ISO week) साठी built-in आहे:

d = date(2026, 6, 4)
iso_year, iso_week, iso_weekday = d.isocalendar()
print(iso_year, iso_week)  # 2026 23

ISO year हवा असेल तेव्हा d.year नाही, d.isocalendar().year वापरा — वर्ष-सीमेवर फरक पडतो.

Python 3.8+ मधील fromisocalendar वापरून:

# Get Monday of ISO week 23, 2026 directly
monday = date.fromisocalendar(2026, 23, 1)  # weekday 1 = Monday
print(monday)  # 2026-06-01

Python 3.8 किंवा नंतर असेल तर date.fromisocalendar(year, week, weekday) हा सर्वात स्वच्छ मार्ग आहे.

JavaScript

JavaScript मध्ये native ISO week support नाही. म्हणून manual implementation:

function isoWeekToMonday(year, week) {
  // Jan 4 is always in ISO week 1
  const jan4 = new Date(year, 0, 4)
  const dayOfWeek = jan4.getDay() || 7  // convert Sun=0 to 7
  const week1Monday = new Date(jan4)
  week1Monday.setDate(jan4.getDate() - dayOfWeek + 1)
  
  const monday = new Date(week1Monday)
  monday.setDate(week1Monday.getDate() + (week - 1) * 7)
  return monday
}

function isoWeekToRange(year, week) {
  const monday = isoWeekToMonday(year, week)
  const sunday = new Date(monday)
  sunday.setDate(monday.getDate() + 6)
  return { monday, sunday }
}

// Examples
const { monday, sunday } = isoWeekToRange(2026, 23)
console.log(monday.toISOString().slice(0, 10))  // 2026-06-01
console.log(sunday.toISOString().slice(0, 10))  // 2026-06-07

const w1 = isoWeekToRange(2026, 1)
console.log(w1.monday.toISOString().slice(0, 10))  // 2025-12-29

date-fns वापरून:

import { setISOWeek, setISOWeekYear, startOfISOWeek, endOfISOWeek } from 'date-fns'

function isoWeekToRange(year, week) {
  let d = new Date(year, 0, 4)  // any date in the target year
  d = setISOWeekYear(d, year)
  d = setISOWeek(d, week)
  return {
    monday: startOfISOWeek(d),
    sunday: endOfISOWeek(d)
  }
}

date-fns सर्व edge cases योग्यरीत्या हाताळते, त्यामुळे production साठी ते शिफारसीय आहे.

Excel आणि Google Sheets

Excel मध्ये थेट “week number to date” फंक्शन नाही, पण सूत्र बनवता येते.

Year Y मधील ISO Week W चा सोमवार:

=DATE(Y,1,4) - WEEKDAY(DATE(Y,1,4),2) + 1 + (W-1)*7

याचे घटक:

  • DATE(Y,1,4) — त्या वर्षाचा January 4
  • WEEKDAY(DATE(Y,1,4),2) — Monday=1, Sunday=7 असे day-of-week
  • वजा करून Week 1 चा Monday मिळतो
  • (W-1)*7 जोडून target week ला जाता येते

पूर्ण रेंजसाठी Sunday:

=Monday_formula + 6

शीटमधील उदाहरण (A1=year, B1=week number):

Monday: =DATE(A1,1,4) - WEEKDAY(DATE(A1,1,4),2) + 1 + (B1-1)*7
Sunday: =Monday_cell + 6

दोन्ही सेल dates म्हणून format करा. 2026, week 1 साठी Monday म्हणून December 29, 2025 येईल — आणि ते बरोबर आहे.

उलट (तारीख → ISO week number): ISOWEEKNUM(date) वापरा. ISO year साठी Excel मध्ये native फंक्शन नाही, म्हणून ISOWEEKNUM लेखातील workaround वापरावा लागतो.

SQL

PostgreSQL मध्ये ISO support सर्वात पूर्ण आहे:

-- Monday of ISO week W in year Y
SELECT
  make_date(2026, 1, 4)
    + (23 - 1) * 7  -- step to week 23
    - EXTRACT(isodow FROM make_date(2026, 1, 4))::int + 1
    AS week_monday;
-- 2026-06-01

-- Or more cleanly using generate_series for a range lookup
SELECT
  d::date AS week_monday,
  (d + 6)::date AS week_sunday,
  EXTRACT(isoyear FROM d) AS iso_year,
  EXTRACT(week FROM d) AS iso_week
FROM generate_series(
  DATE '2026-01-01',
  DATE '2026-12-31',
  INTERVAL '7 days'
) d
WHERE EXTRACT(week FROM d) = 23
  AND EXTRACT(isoyear FROM d) = 2026;

PostgreSQL मधील to_date आणि ISO format codes वापरून अधिक स्वच्छ:

-- Convert ISO year + week to Monday
SELECT to_date('2026' || '23' || '1', 'IYYYIWid') AS monday;
-- 2026-06-01

-- Format: IYYY=ISO year, IW=ISO week, id=ISO day (1=Monday)

MySQL:

-- Monday of ISO week 23, 2026
SELECT STR_TO_DATE('202623 Monday', '%X%V %W');
-- 2026-06-01

-- Or step-based:
SELECT DATE_ADD(
  DATE_ADD(STR_TO_DATE('2026-01-04', '%Y-%m-%d'),
    INTERVAL (-(WEEKDAY(STR_TO_DATE('2026-01-04', '%Y-%m-%d')))) DAY),
  INTERVAL (23 - 1) * 7 DAY
) AS week_monday;

SQL Server:

-- Monday of ISO week 23, 2026
DECLARE @year INT = 2026, @week INT = 23

SELECT DATEADD(
  DAY,
  (@week - 1) * 7
    - (DATEPART(WEEKDAY, DATEFROMPARTS(@year, 1, 4)) + 5) % 7,
  DATEFROMPARTS(@year, 1, 4)
) AS week_monday;
-- 2026-06-01

US-स्टाईल Week Number → तारीखा

जर week number US-स्टाईल सिस्टिममधून आला असेल (Week 1 = January 1 समाविष्ट, आठवड्याची सुरुवात Sunday किंवा Monday), तर year boundary इश्यू नसल्यामुळे सूत्र सोपे असते:

Week start (Sunday-based):

Week_start = DATE(Y, 1, 1) + (W - 1) × 7 - WEEKDAY(DATE(Y, 1, 1), 1)

इथे WEEKDAY हे Sunday=1 ते Saturday=7 परत करते.

पण शेड्युलिंग/लॉजिस्टिक्समध्ये ISO जास्त सामान्य आहे. सिस्टम न सांगता फक्त week number दिला असेल तर, विशेषतः आंतरराष्ट्रीय/युरोपियन संदर्भात, ISO गृहित धरणे सुरक्षित असते.

2026 क्विक रेफरन्स: ISO Weeks 1–10 आणि 48–53

ISO WeekYearMondaySunday
W12026Dec 29, 2025Jan 4, 2026
W22026Jan 5, 2026Jan 11, 2026
W32026Jan 12, 2026Jan 18, 2026
W42026Jan 19, 2026Jan 25, 2026
W52026Jan 26, 2026Feb 1, 2026
W62026Feb 2, 2026Feb 8, 2026
W72026Feb 9, 2026Feb 15, 2026
W82026Feb 16, 2026Feb 22, 2026
W92026Feb 23, 2026Mar 1, 2026
W102026Mar 2, 2026Mar 8, 2026
...
W482026Nov 23, 2026Nov 29, 2026
W492026Nov 30, 2026Dec 6, 2026
W502026Dec 7, 2026Dec 13, 2026
W512026Dec 14, 2026Dec 20, 2026
W522026Dec 21, 2026Dec 27, 2026
W532026Dec 28, 2026Jan 3, 2027

2026 चा W1 हा December 29, 2025 रोजी सुरू होतो. 2026 हा 53-week year आहे आणि W53 हा January 3, 2027 रोजी संपतो.

सामान्य चुका (सारांश)

वर्ष न जोडणे. “Week 8” अस्पष्ट आहे. 2026-W08 असे format वापरा.

कॅलेंडर वर्ष वापरणे (ISO week year ऐवजी). December 29, 2025 हे ISO Week 1 of 2026 मध्ये आहे, 2025 मध्ये नाही. 2025 म्हणून साठवले तर बकेट चुकीचा होतो.

Week 1 = January 1 असे गृहित धरणे. अनेक वर्षांत Week 1 हा December 29/30/31 पासून सुरू होतो. January 1 नेहमी Week 1 मध्येच हवा असेल तर तुम्ही US सिस्टिम वापरत आहात, ISO नाही.

सोमवाराच्या सूत्रात off-by-one. Jan 4 हा anchor महत्त्वाचा आहे — Jan 1 नाही (तो मागील वर्षाच्या शेवटच्या आठवड्यात जाऊ शकतो). Jan 1 anchor केल्यास काही वर्षांत चुकीचे परिणाम येतात.

वर्ष-सीमेवरील तारखांवर चाचणी न करणे. कोणतेही date-handling code December 28–31 आणि January 1–4 या तारखांवर test करणे आवश्यक आहे. बहुतेक edge cases याच दिवसांत असतात.

ISO Week Number Calculator वापरून कोणत्याही week number साठी तारीख-रेंज पाहू शकता, किंवा current week number आणि आजची ISO week date range तपासू शकता.