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-weekJaarMaandagZondag
W12025December 30, 2024January 5, 2025
W12026December 29, 2025January 4, 2026
W12027January 4, 2027January 10, 2027
W12028January 3, 2028January 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:

DagOffset 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 jaar
  • WEEKDAY(DATE(Y,1,4),2) — dag van de week waarbij maandag=1 en zondag=7
  • Aftrekken geeft de maandag van week 1
  • (W-1)*7 verplaatst 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-weekJaarMaandagZondag
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

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.

Gerelateerde artikelen