Jinsi ya Kubadilisha Namba ya Wiki kuwa Masafa ya Tarehe — Mwongozo Kamili
Mtu anakutumia ratiba. “Uwasilishaji wiki W23.” Unafungua kalenda yako na kutazama. Hiyo ni tarehe gani hasa?
Namba za wiki hutumika kila mahali katika upangaji wa miradi, uzalishaji, rejareja, na lojistiki — lakini watu wengi huzijua kama lebo tu. Kubadilisha namba ya wiki kurudi kwenye tarehe za kalenda si jambo la moja kwa moja, na kesi za mipaka ya mwaka huwakwaza hata watengenezaji wenye uzoefu.
Mwongozo huu unafunika ubadilishaji kamili: namba ya wiki hadi Jumatatu, namba ya wiki hadi masafa kamili ya tarehe (Jumatatu–Jumapili), na kinyume chake (tarehe hadi namba ya wiki). Pia una mifano ya msimbo kwa Python, JavaScript, Excel, na SQL.
Namba ya Wiki Inakuambia Nini Hasa
Kabla ya kuhesabu chochote, unahitaji kujua mfumo wa kuhesabu wiki ambao namba hiyo imetoka.
ISO 8601 (kiwango cha kimataifa): Wiki ya 1 ni wiki iliyo na Alhamisi ya kwanza ya mwaka. Wiki huenda Jumatatu hadi Jumapili. Mwaka una wiki 52 au 53 za ISO. Muhimu sana — mwaka wa wiki wa ISO unaweza kutofautiana na mwaka wa kalenda. Siku za mwisho za Desemba wakati mwingine huwa kwenye Wiki ya 1 ya mwaka unaofuata.
Mtindo wa Marekani (US-style): Wiki ya 1 ni wiki iliyo na Januari 1. Wiki zinaweza kuwa Jumapili hadi Jumamosi au Jumatatu hadi Jumapili kutegemea zana. Januari 1 huwa kwenye wiki ya 1 kila mara, bila ubaguzi.
Kwa sehemu iliyobaki ya mwongozo huu, “namba ya wiki” ina maana ya ISO 8601 isipokuwa ikisemwa vinginevyo. Kama mtu amekupa namba ya wiki kutoka zana ya mtindo wa Marekani (kama Excel WEEKNUM chaguo-msingi), fomula ya ubadilishaji ni tofauti — tazama sehemu ya chini.
Pia unahitaji mwaka. “Wiki 23” haina maana bila mwaka. Daima tazama namba ya wiki kama jozi (year, week). Wiki 23 ya 2025 huanza Juni 2. Wiki 23 ya 2026 huanza Juni 1. Wiki 1 ya 2026 huanza Desemba 29 ya 2025.
Fomula Kuu: Namba ya Wiki ya ISO hadi Jumatatu
Kila wiki ya ISO huanza Jumatatu. Ili kupata Jumatatu ya wiki ya ISO W katika mwaka Y:
Monday = Jan 4 of Y + (W - 1) × 7 days - weekday(Jan 4 of Y) + 1
Mantiki: Januari 4 huwa ndani ya Wiki ya 1 ya ISO kila wakati (kwa ufafanuzi — iko ndani ya siku nne za mwanzo wa mwaka, jambo linalohakikisha wiki hiyo ina Alhamisi). Tafuta Jumatatu ya wiki iliyo na Januari 4, kisha songa mbele kwa wiki (W - 1).
Njia safi iliyo sawa:
Monday of W1 = Jan 4 of Y - weekday(Jan 4 of Y) + 1
Monday of W = Monday of W1 + (W - 1) × 7
ambapo weekday hurudisha 1 kwa Jumatatu hadi 7 kwa Jumapili (ISO weekday numbering).
Mfano: Wiki 23 ya 2026
- Januari 4, 2026 ni Jumapili. ISO weekday = 7.
- Jumatatu ya W1: Jan 4 − 7 + 1 = Dec 29, 2025.
- Jumatatu ya W23: Dec 29, 2025 + 22 × 7 = Dec 29 + siku 154 = June 1, 2026.
- Jumapili ya W23: June 1 + 6 = June 7, 2026.
Wiki 23 ya 2026 ni kuanzia Juni 1 (Jumatatu) hadi Juni 7 (Jumapili).
Mtego wa Mpaka wa Mwaka
Hili ndilo kosa la kawaida zaidi: kudhani Wiki 1 ya mwaka Y daima huanza ndani ya mwaka Y.
Sio hivyo.
Wiki 1 ya mwaka ni wiki iliyo na Alhamisi ya kwanza. Kama Alhamisi hiyo iko mapema Januari, basi Jumatatu ya Wiki 1 inaweza kuangukia Desemba ya mwaka uliotangulia.
Mifano:
| ISO Wiki | Mwaka | Jumatatu | Jumapili |
|---|---|---|---|
| W1 | 2025 | December 30, 2024 | January 5, 2025 |
| W1 | 2026 | December 29, 2025 | January 4, 2026 |
| W1 | 2027 | January 4, 2027 | January 10, 2027 |
| W1 | 2028 | January 3, 2028 | January 9, 2028 |
W1 ya 2025 huanza Desemba 2024. W1 ya 2026 huanza Desemba 2025.
Hii inamaanisha:
- Desemba 29–31, 2025 ziko ndani ya ISO Wiki 1 ya 2026, si 2025.
- Kama mtu anasema “deliver by W1 2026,” deadline ni wiki inayoanza Desemba 29, 2025.
Mtego wa kinyume pia upo: siku za mwisho za baadhi ya miaka huangukia Wiki 1 ya mwaka unaofuata, si wiki ya mwisho ya mwaka husika. Daima tumia mwaka wa wiki wa ISO (msimbo wa muundo %G kwenye Python, isoyear kwenye PostgreSQL) unapoweka lebo — si mwaka wa kalenda.
Masafa Kamili ya Tarehe kwa Wiki Yoyote
Ukishapata Jumatatu, siku zilizobaki ni rahisi:
| Siku | Tofauti kutoka Jumatatu |
|---|---|
| Monday | +0 |
| Tuesday | +1 |
| Wednesday | +2 |
| Thursday | +3 |
| Friday | +4 |
| Saturday | +5 |
| Sunday | +6 |
Masafa ya tarehe ya wiki W ni: [Jumatatu, Jumatatu + siku 6].
Kwa madhumuni ya siku za kazi (Jumatatu–Ijumaa): [Jumatatu, Jumatatu + siku 4].
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 pia ina built-in kwa kinyume chake (tarehe hadi wiki ya ISO):
d = date(2026, 6, 4)
iso_year, iso_week, iso_weekday = d.isocalendar()
print(iso_year, iso_week) # 2026 23
Tumia d.isocalendar().year (si d.year) unapohitaji mwaka wa ISO — vinaweza kutofautiana kwenye mipaka ya mwaka.
Kwa reverse lookup ukitumia fromisocalendar (Python 3.8+):
# Get Monday of ISO week 23, 2026 directly
monday = date.fromisocalendar(2026, 23, 1) # weekday 1 = Monday
print(monday) # 2026-06-01
JavaScript
JavaScript haina built-in ya ISO week. Njia ya kawaida ni kuhesabu “Alhamisi” ya wiki hiyo, kisha kuhesabu wiki tangu “week 1 anchor”:
function isoWeekToMonday(year, week) {
// Start from Jan 4, which is always in ISO week 1
const jan4 = new Date(Date.UTC(year, 0, 4))
// ISO weekday: Monday=1 ... Sunday=7
const isoWeekday = (jan4.getUTCDay() + 6) % 7 + 1
// Monday of week 1
const week1Monday = new Date(jan4)
week1Monday.setUTCDate(jan4.getUTCDate() - (isoWeekday - 1))
// Monday of target week
const monday = new Date(week1Monday)
monday.setUTCDate(week1Monday.getUTCDate() + (week - 1) * 7)
return monday
}
function isoWeekToRange(year, week) {
const monday = isoWeekToMonday(year, week)
const sunday = new Date(monday)
sunday.setUTCDate(monday.getUTCDate() + 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
Kutumia 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 hushughulikia edge cases zote kwa usahihi na ndiyo njia inayopendekezwa kwa production code.
Excel na Google Sheets
Excel haina “week number to date” function ya moja kwa moja, lakini unaweza kuijenga kwa fomula.
Jumatatu ya ISO Wiki W katika Mwaka Y:
=DATE(Y,1,4) - WEEKDAY(DATE(Y,1,4),2) + 1 + (W-1)*7
Ufafanuzi:
DATE(Y,1,4)— Januari 4 ya mwakaWEEKDAY(DATE(Y,1,4),2)— siku ya wiki ambapo Monday=1, Sunday=7- Kutoa kunakupa Jumatatu ya Wiki 1
- Kuongeza
(W-1)*7kunasonga hadi wiki lengwa
Kwa masafa kamili, Jumapili ni:
=Monday_formula + 6
Mfano kwenye sheet (A1 = year, B1 = week number):
Monday: =DATE(A1,1,4) - WEEKDAY(DATE(A1,1,4),2) + 1 + (B1-1)*7
Sunday: =Monday_cell + 6
Format seli zote kama tarehe. Kwa mwaka 2026, wiki 1, hii inarudisha Desemba 29, 2025 kwa Jumatatu — na hiyo ni sahihi.
Kinyume chake (tarehe hadi namba ya wiki ya ISO): Tumia ISOWEEKNUM(date). Kwa ISO year, tumia workaround kutoka makala ya ISOWEEKNUM kwa sababu Excel haina ISO year function ya asili.
SQL
PostgreSQL ina msaada kamili zaidi wa ISO:
-- 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;
Njia safi zaidi kwa to_date na 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)
Hii ndiyo njia rahisi zaidi kwa PostgreSQL: tengeneza string YYYYWWD na uiparse kwa ISO format codes.
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
Namba ya Wiki ya Mtindo wa Marekani (US-style) hadi Tarehe
Kama namba ya wiki imetoka kwenye mfumo wa mtindo wa Marekani (Wiki 1 = ina Januari 1, wiki huanza Jumapili au Jumatatu), fomula ni rahisi kwa sababu hakuna mtego wa mipaka ya mwaka:
Mwanzo wa wiki (unaotegemea Jumapili):
Week_start = DATE(Y, 1, 1) + (W - 1) × 7 - WEEKDAY(DATE(Y, 1, 1), 1)
ambapo WEEKDAY hurudisha 1 kwa Jumapili hadi 7 kwa Jumamosi.
Lakini namba za wiki za US si za kawaida sana kwa ratiba na lojistiki kuliko ISO. Kama mtu anakupa namba ya wiki bila kutaja mfumo, chukulia ISO — hasa katika muktadha wa biashara ya kimataifa au Ulaya.
Marejeo ya Haraka ya 2026: ISO Wiki 1–10 na 48–53
| ISO Week | Year | Monday | Sunday |
|---|---|---|---|
| W1 | 2026 | Dec 29, 2025 | Jan 4, 2026 |
| W2 | 2026 | Jan 5, 2026 | Jan 11, 2026 |
| W3 | 2026 | Jan 12, 2026 | Jan 18, 2026 |
| W4 | 2026 | Jan 19, 2026 | Jan 25, 2026 |
| W5 | 2026 | Jan 26, 2026 | Feb 1, 2026 |
| W6 | 2026 | Feb 2, 2026 | Feb 8, 2026 |
| W7 | 2026 | Feb 9, 2026 | Feb 15, 2026 |
| W8 | 2026 | Feb 16, 2026 | Feb 22, 2026 |
| W9 | 2026 | Feb 23, 2026 | Mar 1, 2026 |
| W10 | 2026 | Mar 2, 2026 | Mar 8, 2026 |
| ... | |||
| W48 | 2026 | Nov 23, 2026 | Nov 29, 2026 |
| W49 | 2026 | Nov 30, 2026 | Dec 6, 2026 |
| W50 | 2026 | Dec 7, 2026 | Dec 13, 2026 |
| W51 | 2026 | Dec 14, 2026 | Dec 20, 2026 |
| W52 | 2026 | Dec 21, 2026 | Dec 27, 2026 |
| W53 | 2026 | Dec 28, 2026 | Jan 3, 2027 |
Kumbuka W1 ya 2026 huanza Desemba 29, 2025. Na W53 ya 2026 inaisha Januari 3, 2027 — 2026 ni mwaka wa wiki 53.
Makosa ya Kawaida kwa Muhtasari
Kutokujumuisha mwaka. “Wiki 8” ni ya utata. Daima tumia muundo 2026-W08 au unaofanana.
Kutumia mwaka wa kalenda badala ya mwaka wa wiki wa ISO. Desemba 29, 2025 iko kwenye ISO Wiki 1 ya 2026, si 2025. Kuihifadhi chini ya 2025 huweka kwenye “kikapu” kisicho sahihi.
Kudhani Wiki 1 huanza Januari 1. Mara nyingi huanza Desemba 29, 30, au 31. Kama unahitaji Januari 1 iwe Wiki 1 kila mara, unatumia mfumo wa Marekani, si ISO.
Kukosea kwa moja kwenye fomula ya Jumatatu. Anchor ya Jan 4 ni muhimu — si Jan 1 (ambayo inaweza kuwa kwenye wiki ya mwisho ya mwaka uliopita). Kutumia Jan 1 kama anchor hutoa majibu mabaya katika miaka ambayo Jan 1 iko mwishoni mwa wiki.
Kutokupima tarehe za mipaka ya mwaka. Msimbo wowote wa kushughulikia tarehe unapaswa kupimwa dhidi ya Desemba 28–31 na Januari 1–4. Hizo siku 4 hadi 7 ndizo zenye edge cases zote.
Tumia Kikokotoo cha Namba ya Wiki ya ISO kuangalia masafa ya tarehe ya wiki yoyote, au angalia namba ya wiki ya sasa pamoja na masafa ya tarehe ya wiki ya ISO ya leo.
