Um als Ansatz mal etwas in der Art ohne Verwendung von `lualatex` (so sehr ich das mag) und ohne TikZ (so mächtig das ist) zu zeigen, hier ein paar Datumsberechnungen. Als einziges Datumspaket wird hier das recht einfache `scrdate` verwendet. Außerdem wird auf den internen Monatsnamen von `babel` zurückgegriffen.
\documentclass[fontsize=10pt,DIV=12,paper=landscape,svgnames]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[table]{xcolor}
\usepackage{scrdate}
\newcounter{newyeardaynumber}
\newcounter{firstweekstartoffset}
\newcommand*{\startdate}{}
\newif\ifleepyear
\newcounter{weeksperyear}
\newcommand*{\InitKW}[1]{%
\setcounter{newyeardaynumber}{\DayNumber{#1}{1}{1}}%
\setcounter{weeksperyear}{52}%
\expandafter\ifcase\value{newyeardaynumber}
\setcounter{firstweekstartoffset}{1}%
\edef\startdate{#1-1-2}%
\or
\setcounter{firstweekstartoffset}{0}%
\edef\startdate{#1-1-1}%
\or
\setcounter{firstweekstartoffset}{-1}%
\edef\startdate{\the\numexpr#1-1\relax-12-31}%
\or
\setcounter{firstweekstartoffset}{-2}%
\edef\startdate{\the\numexpr#1-1\relax-12-30}%
\or
\setcounter{firstweekstartoffset}{-3}%
\edef\startdate{\the\numexpr#1-1\relax-12-29}%
\setcounter{weeksperyear}{53}%
\or
\setcounter{firstweekstartoffset}{3}%
\edef\startdate{#1-1-4}%
\or
\setcounter{firstweekstartoffset}{2}%
\edef\startdate{#1-1-3}%
\fi
\expandafter\ifnum\value{weeksperyear}=52
\expandafter\ifnum\DayNumber{\numexpr #1+1\relax}{1}{1}=5
\setcounter{weeksperyear}{53}%
\fi
\fi
\expandafter\ifnum\DayNumber{#1}{2}{29}\expandafter=\DayNumber{#1}{3}{1}
\leepyearfalse
\else
\leepyeartrue
\fi
}
\makeatletter
\newcommand*\splitdate{}
\def\splitdate#1-#2-#3\@nil{\year=#1\relax \month=#2\relax \day=#3\relax}
\newcommand*{\@calcdate}[1]{%
\@tempcnta=#1\relax
\@whilenum \@tempcnta>0\do {%
\@tempcntb=\ifcase \month
\or 31
\or \ifleepyear 29 \else 28 \fi
\or 31
\or 30
\or 31
\or 30
\or 31
\or 31
\or 30
\or 31
\or 30
\or 31
\fi
\ifnum \day>\@tempcntb
\advance\day by -\@tempcntb
\advance\month by 1
\ifnum \month>12\relax \month=1\relax\fi
\month=1\relax\advance\year by 1\relax\fi
\fi
\advance\@tempcnta by -1
\ifnum\@tempcnta>0 \advance\day by 7\relax\fi
}%
}
\newcommand*{\KWStartdate}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\@calcdate{#1}%
\the\day. \csname month@\languagename\endcsname
\endgroup
}
\newcommand*{\KWEnddate}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\advance\day by 6\relax
\@calcdate{#1}%
\the\day. \csname month@\languagename\endcsname
\endgroup
}
\newcommand*{\KWFirst}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\advance\day by 0\relax
\@calcdate{#1}%
\the\day. \the\month. \DayName{\year}{\month}{\day}%
\endgroup
}
\newcommand*{\KWSecond}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\advance\day by 1\relax
\@calcdate{#1}%
\the\day. \the\month. \DayName{\year}{\month}{\day}%
\endgroup
}
\newcommand*{\KWThird}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\advance\day by 2\relax
\@calcdate{#1}%
\the\day. \the\month. \DayName{\year}{\month}{\day}%
\endgroup
}
\newcommand*{\KWForth}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\advance\day by 3\relax
\@calcdate{#1}%
\the\day. \the\month. \DayName{\year}{\month}{\day}%
\endgroup
}
\newcommand*{\KWFifth}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\advance\day by 4\relax
\@calcdate{#1}%
\the\day. \the\month. \DayName{\year}{\month}{\day}%
\endgroup
}
\newcommand*{\KWSixth}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\advance\day by 5\relax
\@calcdate{#1}%
\the\day. \the\month. \DayName{\year}{\month}{\day}%
\endgroup
}
\newcommand*{\KWSeventh}[1]{%
\begingroup
\expandafter\splitdate\startdate\@nil
\advance\day by 6\relax
\@calcdate{#1}%
\the\day. \the\month. \DayName{\year}{\month}{\day}%
\endgroup
}
\makeatother
\newcommand*{\KWshowweek}[1]{%
\newpage
\begingroup
\raggedright
\sffamily
KW #1, \KWStartdate{#1}--\KWEnddate{#1} \the\year
\KWStartdate{#1}--\KWEnddate{#1}
\begin{tabular}{|*4{p{\dimexpr \linewidth/4-2\tabcolsep\relax}|}}
\cellcolor{IndianRed}
\KWFirst{#1} &
\cellcolor{Gold}
\KWSecond{#1} &
\cellcolor{Khaki}
\KWThird{#1} &
\cellcolor{PaleGreen}
\KWForth{#1} \\\hline
& & & \\[12\normalbaselineskip]
\hline
\cellcolor{PaleTurquoise}
\KWFifth{#1} &
\cellcolor{DarkTurquoise}
\KWSixth{#1} &
\cellcolor{MediumOrchid}
\KWSeventh{#1} &
\cellcolor{LightGrey}
Notizen: \\\hline
& & & \\[12\normalbaselineskip]
\hline
\end{tabular}
\endgroup
}
\InitKW{\the\year}
\newcounter{week}
\begin{document}
Der 1. Januar \the\year{} ist ein \DayNameByNumber{\value{newyeardaynumber}} und
das Jahr ist \ifleepyear\else kein \fi Schaltjahr.
Die erste KW beginnt nach ISO~8601 am \startdate{} und das Jahr hat
\arabic{weeksperyear} Wochen.
\setcounter{week}{0}
\csname @whilenum\endcsname\value{week}<\value{weeksperyear}\do {
\stepcounter{week}%
\KWshowweek{\arabic{week}}%
}
\InitKW{2019}
Der 1. Januar 2019 ist ein \DayNameByNumber{\value{newyeardaynumber}} und
das Jahr ist \ifleepyear\else kein \fi Schaltjahr.
Die erste KW beginnt nach ISO~8601 am \startdate{} und das Jahr hat
\arabic{weeksperyear} Wochen.
\setcounter{week}{0}
\csname @whilenum\endcsname\value{week}<\value{weeksperyear}\do {
\stepcounter{week}%
\KWshowweek{\arabic{week}}%
}
\end{document}
Statt `scrdate` und den Monatsnamen von `babel` könnte man auch `datename2` verwenden. Da das Paket auch sehr schöne Berechnungen auf dem Datum erlaubt, könnte man sich im Beispiele die Implementierung einiger eigener Berechnungen sparen. Mir ging es hier aber gerade um diese Berechnungen.
Hier einmal die erste Kalenderwoche im nächsten Jahr:
[![KW1/2019][1]][1]
Es gibt übrigens neben der hier gezeigten Berechnung der Kalenderwoche nach ISO 8601 andere Berechnungsarten. Während nach ISO 8601 die erste Kalenderwoche diejenige mit dem ersten Donnerstag des Jahres ist, wird in einigen Ländern auch festgelegt, dass die erste Kalenderwoche diejenige mit dem ersten Montag oder dem ersten Sonntag ist oder einfach diejenige mit dem ersten Januar. Für eine entsprechende Anpassung müsste man oben nur `\InitKW` ändern.ändern.
[1]: https://texwelt.de/wissen/upfiles/test_20181220_103022.png