{"id":210,"date":"2026-03-05T09:28:16","date_gmt":"2026-03-05T09:28:16","guid":{"rendered":"https:\/\/kalenderwoche.info\/blog\/?page_id=210"},"modified":"2026-03-05T09:28:30","modified_gmt":"2026-03-05T09:28:30","slug":"kalenderwoche-datum","status":"publish","type":"page","link":"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/","title":{"rendered":"KW-Datum Rechner"},"content":{"rendered":"\n<section id=\"tool__kw-datum-rechner\" role=\"region\" aria-labelledby=\"tool__kw-datum-rechner__title\">\n  <style>\n    #tool__kw-datum-rechner{--bg:#fff;--surface:#f6f7f8;--border:#d7dbe0;--text:#1b1f23;--muted:#5b6570;--danger:#b42318;--ok:#1a7f37;--ring:#2f6feb;--radius:14px;--pad:16px;--gap:12px;font:16px\/1.45 system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:var(--text)}\n    #tool__kw-datum-rechner *{box-sizing:border-box}\n    #tool__kw-datum-rechner .card{max-width:720px;margin:0 auto;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:clamp(14px,2.2vw,22px)}\n    #tool__kw-datum-rechner h2{margin:0 0 10px;font-size:1.25rem;line-height:1.2;letter-spacing:.2px}\n    #tool__kw-datum-rechner .sub{margin:0 0 14px;color:var(--muted);font-size:.95rem}\n    #tool__kw-datum-rechner .mode{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}\n    #tool__kw-datum-rechner .seg{display:flex;gap:6px;background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:4px}\n    #tool__kw-datum-rechner .seg button{appearance:none;border:0;background:transparent;color:var(--text);padding:8px 10px;border-radius:999px;cursor:pointer;font-weight:600;font-size:.95rem}\n    #tool__kw-datum-rechner .seg button[aria-pressed=\"true\"]{background:var(--bg);border:1px solid var(--border)}\n    #tool__kw-datum-rechner form{margin:0}\n    #tool__kw-datum-rechner .grid{display:grid;grid-template-columns:1fr;gap:var(--gap)}\n    @media (min-width:640px){\n      #tool__kw-datum-rechner .grid.cols-2{grid-template-columns:1fr 1fr}\n      #tool__kw-datum-rechner .grid.cols-3{grid-template-columns:1fr 1fr 1fr}\n    }\n    #tool__kw-datum-rechner .field{display:flex;flex-direction:column;gap:6px}\n    #tool__kw-datum-rechner label{font-weight:650;font-size:.95rem}\n    #tool__kw-datum-rechner .help{color:var(--muted);font-size:.9rem}\n    #tool__kw-datum-rechner input,#tool__kw-datum-rechner select{width:100%;border:1px solid var(--border);border-radius:12px;background:var(--bg);padding:12px 12px;font-size:1rem;min-height:44px;color:var(--text)}\n    #tool__kw-datum-rechner input::placeholder{color:#8a949f}\n    #tool__kw-datum-rechner input:focus,#tool__kw-datum-rechner select:focus,#tool__kw-datum-rechner button:focus{outline:3px solid color-mix(in srgb, var(--ring) 35%, transparent);outline-offset:2px}\n    #tool__kw-datum-rechner .actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:2px}\n    #tool__kw-datum-rechner .btn{appearance:none;border:1px solid var(--border);background:var(--surface);color:var(--text);border-radius:12px;padding:11px 12px;cursor:pointer;font-weight:700;min-height:44px}\n    #tool__kw-datum-rechner .btn.primary{background:var(--text);color:var(--bg);border-color:var(--text)}\n    #tool__kw-datum-rechner .btn:active{transform:translateY(1px)}\n    #tool__kw-datum-rechner .toggle{display:flex;align-items:center;gap:10px;margin-left:auto}\n    #tool__kw-datum-rechner .toggle label{font-weight:600;margin:0}\n    #tool__kw-datum-rechner .toggle input{width:18px;height:18px;min-height:auto}\n    #tool__kw-datum-rechner .status{margin:12px 0 0;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}\n    #tool__kw-datum-rechner .status[hidden]{display:none}\n    #tool__kw-datum-rechner .error{border-color:color-mix(in srgb, var(--danger) 35%, var(--border));background:color-mix(in srgb, var(--danger) 7%, var(--surface))}\n    #tool__kw-datum-rechner .error .msg{color:var(--danger);font-weight:650}\n    #tool__kw-datum-rechner .result{display:grid;gap:10px}\n    #tool__kw-datum-rechner .result .row{display:flex;gap:10px;align-items:flex-start;justify-content:space-between;flex-wrap:wrap}\n    #tool__kw-datum-rechner .k{color:var(--muted);font-size:.92rem}\n    #tool__kw-datum-rechner .v{font-weight:750;font-size:1.05rem}\n    #tool__kw-datum-rechner .pill{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--border);background:var(--bg);border-radius:999px;padding:8px 10px}\n    #tool__kw-datum-rechner .copy{appearance:none;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:10px;padding:9px 10px;cursor:pointer;font-weight:700;min-height:40px}\n    #tool__kw-datum-rechner .copy[disabled]{opacity:.6;cursor:not-allowed}\n    #tool__kw-datum-rechner .sr{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}\n    #tool__kw-datum-rechner .content{max-width:720px;margin:14px auto 0;color:var(--text)}\n    #tool__kw-datum-rechner .content p{margin:0 0 10px}\n    #tool__kw-datum-rechner details{max-width:720px;margin:10px auto 0;border:1px solid var(--border);border-radius:12px;background:var(--bg)}\n    #tool__kw-datum-rechner details>summary{cursor:pointer;padding:12px 14px;font-weight:750}\n    #tool__kw-datum-rechner details>div{padding:0 14px 14px;color:var(--text)}\n    #tool__kw-datum-rechner .note{color:var(--muted);font-size:.92rem;margin-top:6px}\n    #tool__kw-datum-rechner .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}\n  <\/style>\n\n  <div class=\"card\">\n    <h2 id=\"tool__kw-datum-rechner__title\">KW-Datum Rechner<\/h2>\n    <p class=\"sub\">Rechnen Sie ISO-Kalenderwochen (KW) und Datum pr\u00e4zise um \u2013 inkl. Wochentag, KW-Jahr und sauberer Validierung.<\/p>\n\n    <div class=\"mode\" role=\"group\" aria-label=\"Modus w\u00e4hlen\">\n      <div class=\"seg\">\n        <button type=\"button\" data-mode=\"date2kw\" aria-pressed=\"true\">Datum \u2192 KW<\/button>\n        <button type=\"button\" data-mode=\"kw2date\" aria-pressed=\"false\">KW \u2192 Datum<\/button>\n      <\/div>\n      <span class=\"note\" id=\"tool__kw-datum-rechner__hint\">Tipp: Enter berechnet, Esc setzt zur\u00fcck.<\/span>\n    <\/div>\n\n    <form id=\"tool__kw-datum-rechner__form\" novalidate>\n      <div class=\"grid\" id=\"tool__kw-datum-rechner__fields\"><\/div>\n\n      <div class=\"actions\">\n        <button class=\"btn primary\" type=\"submit\" id=\"tool__kw-datum-rechner__calc\">Berechnen<\/button>\n        <button class=\"btn\" type=\"button\" id=\"tool__kw-datum-rechner__reset\">Zur\u00fccksetzen<\/button>\n\n        <div class=\"toggle\">\n          <input type=\"checkbox\" id=\"tool__kw-datum-rechner__remember\" \/>\n          <label for=\"tool__kw-datum-rechner__remember\">Eingaben merken<\/label>\n        <\/div>\n      <\/div>\n\n      <div class=\"status\" id=\"tool__kw-datum-rechner__status\" aria-live=\"polite\" aria-atomic=\"true\" hidden>\n        <div class=\"result\" id=\"tool__kw-datum-rechner__result\" hidden><\/div>\n        <div class=\"msg\" id=\"tool__kw-datum-rechner__msg\" hidden><\/div>\n      <\/div>\n\n      <div class=\"sr\" id=\"tool__kw-datum-rechner__a11y\" aria-live=\"assertive\" aria-atomic=\"true\"><\/div>\n    <\/form>\n  <\/div>\n\n  <div class=\"content\">\n    <p>In Deutschland werden Kalenderwochen in der Regel nach ISO&nbsp;8601 verwendet: Die Woche beginnt am Montag, und <strong>KW&nbsp;1<\/strong> ist die erste Woche mit <strong>mindestens vier Tagen<\/strong> im neuen Jahr. Dadurch kann ein Datum Anfang Januar noch zur letzten Kalenderwoche des Vorjahres geh\u00f6ren \u2013 oder Ende Dezember bereits zur KW&nbsp;1 des Folgejahres. Dieser Rechner nutzt genau diese ISO-Regeln und zeigt Ihnen neben der Kalenderwoche auch das zugeh\u00f6rige <strong>KW-Jahr<\/strong> sowie den <strong>Wochentag<\/strong>. Umgekehrt k\u00f6nnen Sie aus <strong>KW, Jahr und Wochentag<\/strong> das exakte Datum ermitteln. Alle Eingaben werden validiert, damit keine unklaren Ergebnisse wie \u201eNaN\u201c entstehen. Die Ausgabe ist auf das deutsche Datumsformat (de-DE) abgestimmt und l\u00e4sst sich bequem kopieren \u2013 praktisch f\u00fcr Planung, Projektmanagement, Dienstpl\u00e4ne und Terminabstimmungen.<\/p>\n  <\/div>\n\n  <details>\n    <summary>Warum weicht das KW-Jahr manchmal vom Kalenderjahr ab?<\/summary>\n    <div>ISO-Kalenderwochen werden nach Wochenlogik gez\u00e4hlt. Liegen die ersten Tage im Januar \u00fcberwiegend in einer Woche, die noch \u201ezum alten Jahr\u201c geh\u00f6rt, kann das Datum in die letzte KW des Vorjahres fallen. Entsprechend kann ein Datum Ende Dezember bereits zur KW&nbsp;1 des Folgejahres z\u00e4hlen.<\/div>\n  <\/details>\n  <details>\n    <summary>Welche Regeln gelten f\u00fcr KW&nbsp;1?<\/summary>\n    <div>KW&nbsp;1 ist die erste Woche des Jahres, die mindestens vier Tage im neuen Jahr hat. Formal: Die Woche, die den 4.&nbsp;Januar enth\u00e4lt. Wochen beginnen am Montag.<\/div>\n  <\/details>\n  <details>\n    <summary>Wie wird aus KW und Wochentag ein Datum berechnet?<\/summary>\n    <div>Aus dem KW-Jahr wird der Montag der KW&nbsp;1 ermittelt, anschlie\u00dfend werden Wochen- und Tagesoffsets addiert. Das Ergebnis ist das konkrete Datum dieses Wochentags in der gew\u00e4hlten Kalenderwoche.<\/div>\n  <\/details>\n  <details>\n    <summary>Werden Zeitzonen ber\u00fccksichtigt?<\/summary>\n    <div>F\u00fcr die Berechnungen werden Datumswerte als reine Kalendertage verarbeitet (UTC-basiert), damit es unabh\u00e4ngig von Sommerzeit\/Zeitzone keine Verschiebungen um einen Tag gibt.<\/div>\n  <\/details>\n\n  <script>\n    (() => {\n      'use strict';\n\n      const ROOT = document.getElementById('tool__kw-datum-rechner');\n      const form = document.getElementById('tool__kw-datum-rechner__form');\n      const fieldsWrap = document.getElementById('tool__kw-datum-rechner__fields');\n      const statusEl = document.getElementById('tool__kw-datum-rechner__status');\n      const resultEl = document.getElementById('tool__kw-datum-rechner__result');\n      const msgEl = document.getElementById('tool__kw-datum-rechner__msg');\n      const a11yEl = document.getElementById('tool__kw-datum-rechner__a11y');\n      const resetBtn = document.getElementById('tool__kw-datum-rechner__reset');\n      const rememberEl = document.getElementById('tool__kw-datum-rechner__remember');\n\n      const LS_KEY = 'tool__kw-datum-rechner:v1';\n      const MODES = { DATE2KW: 'date2kw', KW2DATE: 'kw2date' };\n\n      const WEEKDAY_OPTIONS = [\n        { value: '1', label: 'Montag' },\n        { value: '2', label: 'Dienstag' },\n        { value: '3', label: 'Mittwoch' },\n        { value: '4', label: 'Donnerstag' },\n        { value: '5', label: 'Freitag' },\n        { value: '6', label: 'Samstag' },\n        { value: '7', label: 'Sonntag' }\n      ];\n\n      const dtfDate = new Intl.DateTimeFormat('de-DE', { year: 'numeric', month: '2-digit', day: '2-digit' });\n\n      const state = {\n        mode: MODES.DATE2KW,\n        remember: true,\n        inputs: {\n          date: '',\n          isoYear: '',\n          isoWeek: '',\n          isoWeekday: '1'\n        },\n        output: null,\n        error: null,\n        toast: null\n      };\n\n      function pad2(n) {\n        const x = String(n);\n        return x.length === 1 ? '0' + x : x;\n      }\n\n      function clampInt(n, min, max) {\n        if (!Number.isFinite(n)) return NaN;\n        const x = Math.trunc(n);\n        if (x < min || x > max) return NaN;\n        return x;\n      }\n\n      function isValidISODateString(s) {\n        if (typeof s !== 'string' || s.length !== 10) return false;\n        const m = \/^(\\d{4})-(\\d{2})-(\\d{2})$\/.exec(s);\n        if (!m) return false;\n        const y = Number(m[1]), mo = Number(m[2]), d = Number(m[3]);\n        if (!Number.isInteger(y) || y < 1 || y > 9999) return false;\n        if (mo < 1 || mo > 12) return false;\n        if (d < 1 || d > 31) return false;\n        const dt = new Date(Date.UTC(y, mo - 1, d));\n        return dt.getUTCFullYear() === y && (dt.getUTCMonth() + 1) === mo && dt.getUTCDate() === d;\n      }\n\n      function parseISODateToUTC(s) {\n        const m = \/^(\\d{4})-(\\d{2})-(\\d{2})$\/.exec(s);\n        const y = Number(m[1]), mo = Number(m[2]), d = Number(m[3]);\n        return new Date(Date.UTC(y, mo - 1, d));\n      }\n\n      function formatDateDE(dateUTC) {\n        return dtfDate.format(new Date(Date.UTC(dateUTC.getUTCFullYear(), dateUTC.getUTCMonth(), dateUTC.getUTCDate())));\n      }\n\n      function isoWeekFromDate(dateUTC) {\n        const d = new Date(Date.UTC(dateUTC.getUTCFullYear(), dateUTC.getUTCMonth(), dateUTC.getUTCDate()));\n        let day = d.getUTCDay();\n        if (day === 0) day = 7;\n\n        d.setUTCDate(d.getUTCDate() + (4 - day));\n        const isoYear = d.getUTCFullYear();\n\n        const yearStart = new Date(Date.UTC(isoYear, 0, 1));\n        let yearStartDay = yearStart.getUTCDay();\n        if (yearStartDay === 0) yearStartDay = 7;\n\n        const dayOfYear = Math.floor((d - yearStart) \/ 86400000) + 1;\n        const week = Math.floor((dayOfYear - 1) \/ 7) + 1;\n\n        return { isoYear, isoWeek: week, isoWeekday: day };\n      }\n\n      function isoWeeksInYear(isoYear) {\n        const dec28 = new Date(Date.UTC(isoYear, 11, 28));\n        return isoWeekFromDate(dec28).isoWeek;\n      }\n\n      function dateFromIsoWeek(isoYear, isoWeek, isoWeekday) {\n        const wday = isoWeekday;\n        const jan4 = new Date(Date.UTC(isoYear, 0, 4));\n        let jan4Day = jan4.getUTCDay();\n        if (jan4Day === 0) jan4Day = 7;\n        const mondayWeek1 = new Date(Date.UTC(isoYear, 0, 4));\n        mondayWeek1.setUTCDate(mondayWeek1.getUTCDate() - (jan4Day - 1));\n        const res = new Date(mondayWeek1);\n        res.setUTCDate(res.getUTCDate() + (isoWeek - 1) * 7 + (wday - 1));\n        return res;\n      }\n\n      function sanitizeNumberInput(value) {\n        if (value === '' || value == null) return '';\n        const v = String(value).trim();\n        if (!\/^-?\\d+$\/.test(v)) return '';\n        return v;\n      }\n\n      function getActiveModeButtons() {\n        return ROOT.querySelectorAll('.seg button[data-mode]');\n      }\n\n      function setMode(nextMode) {\n        state.mode = nextMode;\n        state.output = null;\n        state.error = null;\n        state.toast = null;\n\n        const btns = getActiveModeButtons();\n        btns.forEach(b => {\n          const isOn = b.getAttribute('data-mode') === nextMode;\n          b.setAttribute('aria-pressed', isOn ? 'true' : 'false');\n        });\n\n        if (state.remember) saveToStorage();\n        render();\n      }\n\n      function buildFields(mode) {\n        const frag = document.createDocumentFragment();\n\n        if (mode === MODES.DATE2KW) {\n          const grid = el('div', { class: 'grid cols-2' });\n\n          const fDate = fieldInput({\n            id: 'tool__kw-datum-rechner__date',\n            key: 'date',\n            label: 'Datum',\n            type: 'date',\n            placeholder: '',\n            required: true,\n            help: 'W\u00e4hlen Sie ein Datum (ISO-Kalenderwochen nach ISO 8601).',\n            attrs: { min: '0001-01-01', max: '9999-12-31' }\n          });\n\n          const fInfo = el('div', { class: 'field' },\n            el('div', { class: 'help' }, 'Hinweis'),\n            el('div', { class: 'pill', role: 'note', 'aria-label': 'ISO-Regel' },\n              el('span', {}, 'Wochenstart: Montag \u00b7 KW 1 enth\u00e4lt den 4. Januar')\n            ),\n            el('div', { class: 'note' }, 'Sie k\u00f6nnen anschlie\u00dfend die Ergebnisse kopieren.')\n          );\n\n          grid.appendChild(fDate);\n          grid.appendChild(fInfo);\n\n          frag.appendChild(grid);\n        } else {\n          const grid = el('div', { class: 'grid cols-3' });\n\n          const fYear = fieldInput({\n            id: 'tool__kw-datum-rechner__isoyear',\n            key: 'isoYear',\n            label: 'KW-Jahr',\n            type: 'number',\n            placeholder: 'z. B. 2026',\n            required: true,\n            help: 'ISO-Kalenderjahr der Kalenderwoche (nicht immer identisch mit dem Kalenderjahr).',\n            attrs: { min: '1', max: '9999', step: '1', inputmode: 'numeric' }\n          });\n\n          const fWeek = fieldInput({\n            id: 'tool__kw-datum-rechner__isoweek',\n            key: 'isoWeek',\n            label: 'Kalenderwoche (KW)',\n            type: 'number',\n            placeholder: '1\u201353',\n            required: true,\n            help: 'G\u00fcltig je nach Jahr: 1 bis 52 oder 53.',\n            attrs: { min: '1', max: '53', step: '1', inputmode: 'numeric' }\n          });\n\n          const fWday = fieldSelect({\n            id: 'tool__kw-datum-rechner__isoweekday',\n            key: 'isoWeekday',\n            label: 'Wochentag',\n            required: true,\n            help: 'ISO-Wochentag (Montag = 1, Sonntag = 7).',\n            options: WEEKDAY_OPTIONS\n          });\n\n          grid.appendChild(fYear);\n          grid.appendChild(fWeek);\n          grid.appendChild(fWday);\n\n          frag.appendChild(grid);\n        }\n\n        return frag;\n      }\n\n      function el(tag, attrs, ...children) {\n        const node = document.createElement(tag);\n        if (attrs) {\n          for (const [k, v] of Object.entries(attrs)) {\n            if (v === null || v === undefined) continue;\n            if (k === 'class') node.className = v;\n            else if (k === 'text') node.textContent = v;\n            else node.setAttribute(k, String(v));\n          }\n        }\n        for (const ch of children) {\n          if (ch == null) continue;\n          node.appendChild(typeof ch === 'string' ? document.createTextNode(ch) : ch);\n        }\n        return node;\n      }\n\n      function fieldInput(cfg) {\n        const wrap = el('div', { class: 'field' });\n        const label = el('label', { for: cfg.id, text: cfg.label });\n        const input = el('input', {\n          id: cfg.id,\n          name: cfg.key,\n          type: cfg.type,\n          placeholder: cfg.placeholder || '',\n          ...(cfg.required ? { 'aria-required': 'true', required: 'required' } : {})\n        });\n        if (cfg.attrs) {\n          for (const [k, v] of Object.entries(cfg.attrs)) input.setAttribute(k, String(v));\n        }\n        const help = cfg.help ? el('div', { class: 'help', id: cfg.id + '__help', text: cfg.help }) : null;\n        if (help) input.setAttribute('aria-describedby', help.id);\n\n        input.value = state.inputs[cfg.key] ?? '';\n\n        wrap.appendChild(label);\n        wrap.appendChild(input);\n        if (help) wrap.appendChild(help);\n        return wrap;\n      }\n\n      function fieldSelect(cfg) {\n        const wrap = el('div', { class: 'field' });\n        const label = el('label', { for: cfg.id, text: cfg.label });\n        const select = el('select', {\n          id: cfg.id,\n          name: cfg.key,\n          ...(cfg.required ? { 'aria-required': 'true', required: 'required' } : {})\n        });\n        for (const opt of cfg.options) {\n          const o = el('option', { value: opt.value, text: opt.label });\n          select.appendChild(o);\n        }\n        const help = cfg.help ? el('div', { class: 'help', id: cfg.id + '__help', text: cfg.help }) : null;\n        if (help) select.setAttribute('aria-describedby', help.id);\n\n        select.value = String(state.inputs[cfg.key] ?? cfg.options?.[0]?.value ?? '');\n\n        wrap.appendChild(label);\n        wrap.appendChild(select);\n        if (help) wrap.appendChild(help);\n        return wrap;\n      }\n\n      function validateAndCompute() {\n        state.error = null;\n        state.output = null;\n        state.toast = null;\n\n        if (state.mode === MODES.DATE2KW) {\n          const s = state.inputs.date;\n          if (!s) return { ok: false, error: 'Bitte w\u00e4hlen Sie ein Datum.' };\n          if (!isValidISODateString(s)) return { ok: false, error: 'Bitte geben Sie ein g\u00fcltiges Datum im Format JJJJ-MM-TT ein.' };\n\n          const d = parseISODateToUTC(s);\n          const iso = isoWeekFromDate(d);\n          const weekdayLabel = WEEKDAY_OPTIONS.find(o => Number(o.value) === iso.isoWeekday)?.label || '\u2014';\n\n          const out = {\n            kind: MODES.DATE2KW,\n            dateISO: s,\n            dateDE: formatDateDE(d),\n            isoYear: iso.isoYear,\n            isoWeek: iso.isoWeek,\n            isoWeekday: iso.isoWeekday,\n            weekdayLabel,\n            compact: `KW ${pad2(iso.isoWeek)}\/${iso.isoYear} (${weekdayLabel})`\n          };\n          return { ok: true, output: out };\n        }\n\n        const yRaw = sanitizeNumberInput(state.inputs.isoYear);\n        const wRaw = sanitizeNumberInput(state.inputs.isoWeek);\n        const wdRaw = sanitizeNumberInput(state.inputs.isoWeekday);\n\n        if (!yRaw) return { ok: false, error: 'Bitte geben Sie ein KW-Jahr an.' };\n        if (!wRaw) return { ok: false, error: 'Bitte geben Sie eine Kalenderwoche (KW) an.' };\n\n        const isoYear = clampInt(Number(yRaw), 1, 9999);\n        const isoWeek = clampInt(Number(wRaw), 1, 53);\n        const isoWeekday = clampInt(Number(wdRaw || '1'), 1, 7);\n\n        if (!Number.isFinite(isoYear)) return { ok: false, error: 'KW-Jahr: Bitte eine Zahl zwischen 1 und 9999 eingeben.' };\n        if (!Number.isFinite(isoWeek)) return { ok: false, error: 'Kalenderwoche: Bitte eine Zahl zwischen 1 und 53 eingeben.' };\n        if (!Number.isFinite(isoWeekday)) return { ok: false, error: 'Wochentag: Bitte einen g\u00fcltigen Tag w\u00e4hlen.' };\n\n        const maxWeeks = isoWeeksInYear(isoYear);\n        if (isoWeek > maxWeeks) return { ok: false, error: `Im ISO-Jahr ${isoYear} gibt es nur ${maxWeeks} Kalenderwochen.` };\n\n        const dt = dateFromIsoWeek(isoYear, isoWeek, isoWeekday);\n        const y = dt.getUTCFullYear();\n        if (y < 1 || y > 9999) return { ok: false, error: 'Das berechnete Datum liegt au\u00dferhalb des unterst\u00fctzten Bereichs (0001\u20139999).' };\n\n        const iso = isoWeekFromDate(dt);\n        const weekdayLabel = WEEKDAY_OPTIONS.find(o => Number(o.value) === isoWeekday)?.label || '\u2014';\n        const isoStr = String(y).padStart(4, '0') + '-' + pad2(dt.getUTCMonth() + 1) + '-' + pad2(dt.getUTCDate());\n\n        const out = {\n          kind: MODES.KW2DATE,\n          isoYear,\n          isoWeek,\n          isoWeekday,\n          weekdayLabel,\n          dateISO: isoStr,\n          dateDE: formatDateDE(dt),\n          crosscheck: (iso.isoYear === isoYear && iso.isoWeek === isoWeek) ? 'OK' : 'Hinweis'\n        };\n        return { ok: true, output: out };\n      }\n\n      function render() {\n        while (fieldsWrap.firstChild) fieldsWrap.removeChild(fieldsWrap.firstChild);\n        fieldsWrap.appendChild(buildFields(state.mode));\n\n        rememberEl.checked = !!state.remember;\n\n        const hasStatus = !!(state.error || state.output || state.toast);\n        statusEl.hidden = !hasStatus;\n\n        resultEl.hidden = true;\n        msgEl.hidden = true;\n        statusEl.classList.remove('error');\n\n        if (state.error) {\n          statusEl.classList.add('error');\n          msgEl.textContent = state.error;\n          msgEl.hidden = false;\n          a11yEl.textContent = state.error;\n          return;\n        }\n\n        if (state.output) {\n          renderResult(state.output);\n          resultEl.hidden = false;\n          a11yEl.textContent = 'Ergebnis aktualisiert.';\n          return;\n        }\n\n        if (state.toast) {\n          msgEl.textContent = state.toast;\n          msgEl.hidden = false;\n          a11yEl.textContent = state.toast;\n        }\n      }\n\n      function clearResultUI() {\n        while (resultEl.firstChild) resultEl.removeChild(resultEl.firstChild);\n      }\n\n      function renderResult(out) {\n        clearResultUI();\n\n        const rows = [];\n\n        if (out.kind === MODES.DATE2KW) {\n          rows.push(resultRow('Eingabe', out.dateDE + ' (' + out.dateISO + ')', null));\n          rows.push(resultRow('Kalenderwoche', 'KW ' + pad2(out.isoWeek) + '\/' + out.isoYear, copyBtn('KW ' + pad2(out.isoWeek) + '\/' + out.isoYear)));\n          rows.push(resultRow('Wochentag', out.weekdayLabel, copyBtn(out.weekdayLabel)));\n          rows.push(resultRow('Kurzformat', out.compact, copyBtn(out.compact)));\n        } else {\n          const kwStr = 'KW ' + pad2(out.isoWeek) + '\/' + out.isoYear;\n          rows.push(resultRow('Eingabe', kwStr + ' (' + out.weekdayLabel + ')', null));\n          rows.push(resultRow('Datum', out.dateDE + ' (' + out.dateISO + ')', copyBtn(out.dateDE)));\n          rows.push(resultRow('ISO-String', out.dateISO, copyBtn(out.dateISO)));\n          rows.push(resultRow('Plausibilit\u00e4tscheck', out.crosscheck === 'OK' ? 'Stimmt (ISO-KW verifiziert)' : 'Abweichung festgestellt', null));\n          rows.push(resultRow('KW-String', kwStr, copyBtn(kwStr)));\n        }\n\n        rows.forEach(r => resultEl.appendChild(r));\n\n        if (state.toast) {\n          const t = el('div', { class: 'note', text: state.toast });\n          resultEl.appendChild(t);\n        }\n      }\n\n      function resultRow(k, v, actionEl) {\n        const row = el('div', { class: 'row' });\n        const left = el('div', {},\n          el('div', { class: 'k', text: k }),\n          el('div', { class: 'v' }, v)\n        );\n        row.appendChild(left);\n        if (actionEl) row.appendChild(actionEl);\n        return row;\n      }\n\n      function copyBtn(textToCopy) {\n        const btn = el('button', { type: 'button', class: 'copy', 'data-copy': '1' }, 'Kopieren');\n        btn._copyText = String(textToCopy);\n        return btn;\n      }\n\n      async function copyToClipboard(text) {\n        const t = String(text);\n        try {\n          if (navigator.clipboard && typeof navigator.clipboard.writeText === 'function') {\n            await navigator.clipboard.writeText(t);\n            return true;\n          }\n        } catch (_) {}\n        try {\n          const ta = document.createElement('textarea');\n          ta.value = t;\n          ta.setAttribute('readonly', 'readonly');\n          ta.style.position = 'fixed';\n          ta.style.left = '-9999px';\n          document.body.appendChild(ta);\n          ta.select();\n          const ok = document.execCommand('copy');\n          document.body.removeChild(ta);\n          return !!ok;\n        } catch (_) {\n          return false;\n        }\n      }\n\n      function saveToStorage() {\n        if (!state.remember) return;\n        try {\n          const payload = { mode: state.mode, remember: state.remember, inputs: state.inputs };\n          localStorage.setItem(LS_KEY, JSON.stringify(payload));\n        } catch (_) {}\n      }\n\n      function loadFromStorage() {\n        try {\n          const raw = localStorage.getItem(LS_KEY);\n          if (!raw) return;\n          const data = JSON.parse(raw);\n          if (!data || typeof data !== 'object') return;\n\n          if (data.remember === false) {\n            state.remember = false;\n            return;\n          }\n          state.remember = true;\n\n          if (data.mode === MODES.KW2DATE || data.mode === MODES.DATE2KW) state.mode = data.mode;\n          if (data.inputs && typeof data.inputs === 'object') {\n            const next = { ...state.inputs };\n            if (typeof data.inputs.date === 'string') next.date = data.inputs.date;\n            if (typeof data.inputs.isoYear === 'string' || typeof data.inputs.isoYear === 'number') next.isoYear = String(data.inputs.isoYear);\n            if (typeof data.inputs.isoWeek === 'string' || typeof data.inputs.isoWeek === 'number') next.isoWeek = String(data.inputs.isoWeek);\n            if (typeof data.inputs.isoWeekday === 'string' || typeof data.inputs.isoWeekday === 'number') next.isoWeekday = String(data.inputs.isoWeekday);\n            state.inputs = next;\n          }\n        } catch (_) {}\n      }\n\n      function clearStorage() {\n        try { localStorage.removeItem(LS_KEY); } catch (_) {}\n      }\n\n      function resetAll() {\n        state.inputs = { date: '', isoYear: '', isoWeek: '', isoWeekday: '1' };\n        state.output = null;\n        state.error = null;\n        state.toast = null;\n        if (state.remember) saveToStorage();\n        render();\n      }\n\n      function onInput(e) {\n        const t = e.target;\n        if (!t || !t.name) return;\n\n        if (t.name === 'date') {\n          state.inputs.date = String(t.value || '');\n        } else if (t.name === 'isoYear') {\n          state.inputs.isoYear = sanitizeNumberInput(t.value);\n        } else if (t.name === 'isoWeek') {\n          state.inputs.isoWeek = sanitizeNumberInput(t.value);\n        } else if (t.name === 'isoWeekday') {\n          state.inputs.isoWeekday = String(t.value || '1');\n        } else {\n          return;\n        }\n\n        state.error = null;\n        state.toast = null;\n\n        if (state.remember) saveToStorage();\n      }\n\n      function onSubmit(e) {\n        e.preventDefault();\n        const res = validateAndCompute();\n        if (!res.ok) {\n          state.error = res.error || 'Bitte pr\u00fcfen Sie Ihre Eingaben.';\n          state.output = null;\n        } else {\n          state.error = null;\n          state.output = res.output;\n        }\n        if (state.remember) saveToStorage();\n        render();\n      }\n\n      function onClick(e) {\n        const t = e.target;\n        if (!t) return;\n\n        const modeBtn = t.closest && t.closest('.seg button[data-mode]');\n        if (modeBtn) {\n          const next = modeBtn.getAttribute('data-mode');\n          if (next === MODES.DATE2KW || next === MODES.KW2DATE) setMode(next);\n          return;\n        }\n\n        if (t.id === 'tool__kw-datum-rechner__reset') {\n          resetAll();\n          return;\n        }\n\n        const copyBtnEl = t.closest && t.closest('button[data-copy=\"1\"]');\n        if (copyBtnEl) {\n          const txt = copyBtnEl._copyText || '';\n          copyBtnEl.disabled = true;\n          copyToClipboard(txt).then(ok => {\n            state.toast = ok ? 'Kopiert.' : 'Kopieren nicht m\u00f6glich.';\n            copyBtnEl.disabled = false;\n            render();\n          }).catch(() => {\n            state.toast = 'Kopieren nicht m\u00f6glich.';\n            copyBtnEl.disabled = false;\n            render();\n          });\n        }\n      }\n\n      function onKeydown(e) {\n        if (e.key === 'Escape') {\n          e.preventDefault();\n          resetAll();\n        }\n      }\n\n      function onRememberChange() {\n        const next = !!rememberEl.checked;\n        state.remember = next;\n        state.toast = null;\n        if (!next) clearStorage();\n        else saveToStorage();\n        render();\n      }\n\n      function initDefaults() {\n        const today = new Date();\n        const y = today.getFullYear();\n        const m = pad2(today.getMonth() + 1);\n        const d = pad2(today.getDate());\n        const iso = String(y).padStart(4, '0') + '-' + m + '-' + d;\n\n        if (!state.inputs.date) state.inputs.date = isValidISODateString(iso) ? iso : '';\n        if (!state.inputs.isoYear) state.inputs.isoYear = String(y);\n        if (!state.inputs.isoWeek) {\n          try {\n            const tmp = parseISODateToUTC(state.inputs.date || iso);\n            const w = isoWeekFromDate(tmp).isoWeek;\n            state.inputs.isoWeek = String(w);\n          } catch (_) {\n            state.inputs.isoWeek = '';\n          }\n        }\n      }\n\n      loadFromStorage();\n      initDefaults();\n\n      form.addEventListener('input', onInput, { passive: true });\n      form.addEventListener('submit', onSubmit);\n      ROOT.addEventListener('click', onClick);\n      form.addEventListener('keydown', onKeydown);\n      rememberEl.addEventListener('change', onRememberChange);\n\n      render();\n    })();\n  <\/script>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>KW-Datum Rechner Rechnen Sie ISO-Kalenderwochen (KW) und Datum pr\u00e4zise um \u2013 inkl. Wochentag, KW-Jahr und sauberer Validierung. Datum \u2192 KW KW \u2192 Datum Tipp: Enter berechnet, Esc setzt zur\u00fcck. Berechnen Zur\u00fccksetzen Eingaben merken In Deutschland werden Kalenderwochen in der Regel nach ISO&nbsp;8601 verwendet: Die Woche beginnt am Montag, und KW&nbsp;1 ist die erste Woche mit &#8230; <a title=\"KW-Datum Rechner\" class=\"read-more\" href=\"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/\" aria-label=\"Mehr Informationen \u00fcber KW-Datum Rechner\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-210","page","type-page","status-publish"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Kalenderwoche Datum berechnen (ISO 8601) \u2013 KW-Rechner f\u00fcr Deutschland<\/title>\n<meta name=\"description\" content=\"Kalenderwoche Datum schnell berechnen: ISO 8601 nach Deutschland (Mo-Start, KW 1 mit 4 Tagen). Zeigt KW, KW-Jahr &amp; Wochentag \u2013 und ermittelt Datum aus KW\/Jahr. Validiert Eingaben, de-DE-Format, einfach kopieren.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kalenderwoche Datum berechnen (ISO 8601) \u2013 KW-Rechner f\u00fcr Deutschland\" \/>\n<meta property=\"og:description\" content=\"Kalenderwoche Datum schnell berechnen: ISO 8601 nach Deutschland (Mo-Start, KW 1 mit 4 Tagen). Zeigt KW, KW-Jahr &amp; Wochentag \u2013 und ermittelt Datum aus KW\/Jahr. Validiert Eingaben, de-DE-Format, einfach kopieren.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/\" \/>\n<meta property=\"og:site_name\" content=\"Kalender Wissen\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-05T09:28:30+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"2\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/kalenderwoche-datum\\\/\",\"url\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/kalenderwoche-datum\\\/\",\"name\":\"Kalenderwoche Datum berechnen (ISO 8601) \u2013 KW-Rechner f\u00fcr Deutschland\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-05T09:28:16+00:00\",\"dateModified\":\"2026-03-05T09:28:30+00:00\",\"description\":\"Kalenderwoche Datum schnell berechnen: ISO 8601 nach Deutschland (Mo-Start, KW 1 mit 4 Tagen). Zeigt KW, KW-Jahr & Wochentag \u2013 und ermittelt Datum aus KW\\\/Jahr. Validiert Eingaben, de-DE-Format, einfach kopieren.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/kalenderwoche-datum\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/kalenderwoche-datum\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/kalenderwoche-datum\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Start\",\"item\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"KW-Datum Rechner\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/\",\"name\":\"Kalenderwissen\",\"description\":\"f\u00fcr den Wissenshunger\",\"publisher\":{\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/#organization\",\"name\":\"Kalenderwissen\",\"url\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/apple-touch-icon.png\",\"contentUrl\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/02\\\/apple-touch-icon.png\",\"width\":180,\"height\":180,\"caption\":\"Kalenderwissen\"},\"image\":{\"@id\":\"https:\\\/\\\/kalenderwoche.info\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kalenderwoche Datum berechnen (ISO 8601) \u2013 KW-Rechner f\u00fcr Deutschland","description":"Kalenderwoche Datum schnell berechnen: ISO 8601 nach Deutschland (Mo-Start, KW 1 mit 4 Tagen). Zeigt KW, KW-Jahr & Wochentag \u2013 und ermittelt Datum aus KW\/Jahr. Validiert Eingaben, de-DE-Format, einfach kopieren.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/","og_locale":"de_DE","og_type":"article","og_title":"Kalenderwoche Datum berechnen (ISO 8601) \u2013 KW-Rechner f\u00fcr Deutschland","og_description":"Kalenderwoche Datum schnell berechnen: ISO 8601 nach Deutschland (Mo-Start, KW 1 mit 4 Tagen). Zeigt KW, KW-Jahr & Wochentag \u2013 und ermittelt Datum aus KW\/Jahr. Validiert Eingaben, de-DE-Format, einfach kopieren.","og_url":"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/","og_site_name":"Kalender Wissen","article_modified_time":"2026-03-05T09:28:30+00:00","twitter_card":"summary_large_image","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"2\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/","url":"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/","name":"Kalenderwoche Datum berechnen (ISO 8601) \u2013 KW-Rechner f\u00fcr Deutschland","isPartOf":{"@id":"https:\/\/kalenderwoche.info\/blog\/#website"},"datePublished":"2026-03-05T09:28:16+00:00","dateModified":"2026-03-05T09:28:30+00:00","description":"Kalenderwoche Datum schnell berechnen: ISO 8601 nach Deutschland (Mo-Start, KW 1 mit 4 Tagen). Zeigt KW, KW-Jahr & Wochentag \u2013 und ermittelt Datum aus KW\/Jahr. Validiert Eingaben, de-DE-Format, einfach kopieren.","breadcrumb":{"@id":"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/kalenderwoche.info\/blog\/kalenderwoche-datum\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Start","item":"https:\/\/kalenderwoche.info\/blog\/"},{"@type":"ListItem","position":2,"name":"KW-Datum Rechner"}]},{"@type":"WebSite","@id":"https:\/\/kalenderwoche.info\/blog\/#website","url":"https:\/\/kalenderwoche.info\/blog\/","name":"Kalenderwissen","description":"f\u00fcr den Wissenshunger","publisher":{"@id":"https:\/\/kalenderwoche.info\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kalenderwoche.info\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kalenderwoche.info\/blog\/#organization","name":"Kalenderwissen","url":"https:\/\/kalenderwoche.info\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kalenderwoche.info\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/kalenderwoche.info\/blog\/wp-content\/uploads\/2026\/02\/apple-touch-icon.png","contentUrl":"https:\/\/kalenderwoche.info\/blog\/wp-content\/uploads\/2026\/02\/apple-touch-icon.png","width":180,"height":180,"caption":"Kalenderwissen"},"image":{"@id":"https:\/\/kalenderwoche.info\/blog\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/kalenderwoche.info\/blog\/wp-json\/wp\/v2\/pages\/210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kalenderwoche.info\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kalenderwoche.info\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kalenderwoche.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kalenderwoche.info\/blog\/wp-json\/wp\/v2\/comments?post=210"}],"version-history":[{"count":1,"href":"https:\/\/kalenderwoche.info\/blog\/wp-json\/wp\/v2\/pages\/210\/revisions"}],"predecessor-version":[{"id":212,"href":"https:\/\/kalenderwoche.info\/blog\/wp-json\/wp\/v2\/pages\/210\/revisions\/212"}],"wp:attachment":[{"href":"https:\/\/kalenderwoche.info\/blog\/wp-json\/wp\/v2\/media?parent=210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}