Een weeknummer omzetten naar een datumbereik — de complete gids
Iemand stuurt je een planning. “Levering in W23.” Je opent je agenda en staart ernaar. Welke datums zijn dat precies?
Weeknummers worden overal gebruikt in projectplanning, productie, retail en logistiek — maar de meeste mensen kennen ze alleen als labels. Een weeknummer terugvertalen naar echte kalenderdatums is minder intuïtief dan het zou moeten zijn, en de randgevallen rond de jaargrens zetten zelfs ervaren developers op het verkeerde been.
Deze gids behandelt de volledige omzetting: weeknummer naar maandag, weeknummer naar volledig datumbereik (maandag–zondag) en het omgekeerde (datum naar weeknummer). Met code voor Python, JavaScript, Excel en SQL.
Wat een weeknummer je daadwerkelijk vertelt
Voordat je iets berekent, moet je weten uit welk weeknummeringssysteem het nummer komt.
ISO 8601 (de internationale standaard): Week 1 is de week die de eerste donderdag van het jaar bevat. Weken lopen van maandag tot en met zondag. Een jaar heeft 52 of 53 ISO-weken. Belangrijk: het ISO-weekjaar kan afwijken van het kalenderjaar. De laatste dagen van december vallen soms in week 1 van het volgende jaar.
US-stijl: Week 1 bevat 1 januari. Weken lopen afhankelijk van de tool van zondag tot zaterdag of van maandag tot zondag. 1 januari valt altijd in week 1, zonder uitzonderingen.
In de rest van deze gids betekent “weeknummer” ISO 8601, tenzij anders vermeld. Als iemand je een weeknummer gaf uit een tool die de VS-stijl gebruikt (zoals de standaard Excel WEEKNUM), dan is de formule anders — zie de sectie hieronder.
Je hebt ook het jaar nodig. “Week 23” is betekenisloos zonder het jaar. Behandel weeknummers altijd als het paar (jaar, week). Week 23 van 2025 begint op 2 juni. Week 23 van 2026 begint op 1 juni. Week 1 van 2026 begint op 29 december van 2025.
De kernformule: ISO-weeknummer naar maandag
Elke ISO-week begint op een maandag. Om de maandag van ISO-week W in jaar Y te vinden:
Monday = Jan 4 of Y + (W - 1) × 7 days - weekday(Jan 4 of Y) + 1
De reden: 4 januari valt altijd in ISO-week 1 (per definitie — het ligt binnen de eerste vier dagen van het jaar, wat garandeert dat de week een donderdag bevat). Zoek de maandag van de week waarin 4 januari valt en ga daarna (W - 1) weken vooruit.
Een nettere equivalente vorm:
Monday of W1 = Jan 4 of Y - weekday(Jan 4 of Y) + 1
Monday of W = Monday of W1 + (W - 1) × 7
waar weekday 1 teruggeeft voor maandag tot en met 7 voor zondag (ISO-weekdagnummering).
Voorbeeld: week 23 van 2026
- 4 januari 2026 is een zondag. ISO-weekdag = 7.
- Maandag van W1: 4 jan − 7 + 1 = 29 dec, 2025.
- Maandag van W23: 29 dec, 2025 + 22 × 7 = 29 dec + 154 dagen = 1 juni, 2026.
- Zondag van W23: 1 juni + 6 = 7 juni, 2026.
Week 23 van 2026 loopt van 1 juni (maandag) tot 7 juni (zondag).
De jaargrens-valkuil
De meest gemaakte fout: aannemen dat week 1 van jaar Y altijd in jaar Y begint.
Dat is niet zo.
Week 1 van een jaar is de week die de eerste donderdag bevat. Als die donderdag begin januari valt, kan de maandag van week 1 in de voorgaande december vallen.
Voorbeelden:
| ISO-week | Jaar | Maandag | Zondag |
|---|---|---|---|
| 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 van 2025 begint in december 2024. W1 van 2026 begint in december 2025.
Dit betekent:
- 29–31 december 2025 vallen in ISO-week 1 van 2026, niet van 2025.
- Als iemand zegt “lever vóór W1 2026”, dan is de deadline de week die op 29 december 2025 begint.
De omgekeerde valkuil bestaat ook: de laatste dagen van sommige jaren vallen in week 1 van het volgende jaar, niet in de laatste week van het huidige jaar. Gebruik altijd het ISO-weekjaar (de %G-formatcode in Python, isoyear in PostgreSQL) bij het labelen van een week — niet het kalenderjaar.
Volledig datumbereik voor elk weeknummer
Zodra je de maandag hebt, is de rest van de week eenvoudig:
| Dag | Offset vanaf maandag |
|---|---|
| Maandag | +0 |
| Dinsdag | +1 |
| Woensdag | +2 |
| Donderdag | +3 |
| Vrijdag | +4 |
| Zaterdag | +5 |
| Zondag | +6 |
Het datumbereik voor week W is: [maandag, maandag + 6 dagen].
Voor werkdagdoeleinden (alleen ma–vr): [maandag, maandag + 4 dagen].
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 heeft ook een ingebouwde functie voor het omgekeerde (datum naar ISO-week):
d = date(2026, 6, 4)
iso_year, iso_week, iso_weekday = d.isocalendar()
print(iso_year, iso_week) # 2026 23
Gebruik d.isocalendar().year (niet d.year) wanneer je het ISO-jaar nodig hebt — die kunnen rond de jaargrens verschillen.
Voor de omgekeerde lookup met fromisocalendar (Python 3.8+):
# Get Monday of ISO week 23, 2026 directly
monday = date.fromisocalendar(2026, 23, 1)
print(monday) # 2026-06-01
JavaScript
JavaScript heeft geen ingebouwde ISO-weekconversie, maar je kunt het zelf implementeren.
Hier is een betrouwbare implementatie:
function isoWeekToMonday(year, week) {
// Jan 4 is always in ISO week 1
const jan4 = new Date(Date.UTC(year, 0, 4))
// ISO weekday: Monday=1..Sunday=7
const isoDay = jan4.getUTCDay() === 0 ? 7 : jan4.getUTCDay()
// Monday of week 1
const week1Monday = new Date(jan4)
week1Monday.setUTCDate(jan4.getUTCDate() - isoDay + 1)
// Step forward
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
Met 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 verwerkt alle randgevallen correct en is de aanbevolen aanpak voor productiecode.
Excel en Google Sheets
Excel heeft geen directe functie “weeknummer naar datum”, maar je kunt het opbouwen met een formule.
Maandag van ISO-week W in jaar Y:
=DATE(Y,1,4) - WEEKDAY(DATE(Y,1,4),2) + 1 + (W-1)*7
Uitleg:
DATE(Y,1,4)— 4 januari van het jaarWEEKDAY(DATE(Y,1,4),2)— dag van de week waarbij maandag=1 en zondag=7- Aftrekken geeft de maandag van week 1
(W-1)*7verplaatst naar de gewenste week
Voor een volledig bereik is de zondag simpelweg:
=Monday_formula + 6
Voorbeeld in een sheet (waar A1 = jaar, B1 = weeknummer):
Monday: =DATE(A1,1,4) - WEEKDAY(DATE(A1,1,4),2) + 1 + (B1-1)*7
Sunday: =Monday_cell + 6
Formatteer beide cellen als datums. Voor jaar 2026, week 1, geeft dit 29 december 2025 als maandag — wat correct is.
Omgekeerd (datum naar ISO-weeknummer): Gebruik ISOWEEKNUM(date). Voor het ISO-jaar gebruik je de workaround uit het ISOWEEKNUM-artikel, omdat Excel geen native ISO-jaarfunctie heeft.
SQL
PostgreSQL heeft de meest complete ISO-ondersteuning:
-- 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;
Een nettere aanpak met PostgreSQL’s to_date en ISO-formaatcodes:
-- 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)
Dit is de eenvoudigste aanpak in PostgreSQL: maak een string YYYYWWD en parse die met ISO-formaatcodes.
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
Weeknummer in US-stijl naar datums
Als je weeknummer uit een US-stijlsysteem komt (week 1 = bevat 1 januari, weken starten op zondag of maandag), dan is de formule eenvoudiger omdat er geen jaargrensprobleem is:
Weekstart (zondag-gebaseerd):
Week_start = DATE(Y, 1, 1) + (W - 1) × 7 - WEEKDAY(DATE(Y, 1, 1), 1)
waar WEEKDAY 1 teruggeeft voor zondag tot en met 7 voor zaterdag.
Maar US-weeknummers komen in planning en logistiek veel minder vaak voor dan ISO. Als iemand je een weeknummer geeft zonder het systeem te noemen, ga dan uit van ISO — zeker in internationale of Europese context.
Snelle referentie 2026: ISO-weken 1–10 en 48–53
| ISO-week | Jaar | Maandag | Zondag |
|---|---|---|---|
| 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 |
Let op: W1 van 2026 begint op 29 december 2025. Let op: W53 van 2026 eindigt op 3 januari 2027 — 2026 is een jaar met 53 weken.
Veelgemaakte fouten samengevat
Het jaar niet meenemen. “Week 8” is dubbelzinnig. Gebruik altijd het formaat 2026-W08 of vergelijkbaar.
Kalenderjaar gebruiken in plaats van ISO-weekjaar. 29 december 2025 valt in ISO-week 1 van 2026, niet van 2025. Als je dit onder 2025 opslaat, komt het in de verkeerde bucket terecht.
Aannemen dat week 1 op 1 januari begint. In veel jaren begint week 1 op 29, 30 of 31 december. Als je wilt dat 1 januari altijd in week 1 valt, gebruik je het US-systeem, niet ISO.
Off-by-one in de maandagformule. Het anker 4 jan is belangrijk — niet 1 januari (die kan in de laatste week van het vorige jaar vallen). 1 januari als anker gebruiken geeft verkeerde resultaten in jaren waarin 1 januari laat in de week valt.
Jaargrensdatums niet testen. Elke datum-afhandeling moet getest worden tegen 28–31 december en 1–4 januari. In deze vier tot zeven dagen zitten alle randgevallen.
Gebruik de ISO Week Number Calculator om het datumbereik voor elk weeknummer op te zoeken, of bekijk het huidige weeknummer en het ISO-weekdatumbereik van vandaag.


