Man kann dafür entgegen der Behauptung aus der Frage sehr gut `\newcommand` verwenden, indem man die gemeinsamen Teile der Formeln hierarchisch als Unterberechnungen definiert. Da im Beispiel die Berechnungen nicht in einem lokalen Kontext stattfinden, sollte man allerdings für alle mit `\pgfmathtruncatemacro` definierten Makros sicherstellen, dass sie nicht bereits anderweitig verwendet sind. Das ist auf zwei Arten möglich:
* Verwendung von Makronamen, deren anderweitige Verwendung deutlich unwahrscheinlicher ist als `\a`, `\b` etc. Hier bietet sich beispielsweise ein Präfix an.
* Vorausdefinition der Makros mit `\newcommand`, so dass ein Fehler gemeldet wird, falls der Makroname bereits anderweitig verwendet wird.
Im folgenden verwende ich den Präfix `\DC` (für *date calculation*). Dieser ist nicht so ganz 100% eindeutig, daher kombiniere ich das mit der `\newcommand`-Methode:
\documentclass[margin=5mm, varwidth]{standalone}
\usepackage{tikz}
\newcommand*{\Year}{2018}
\newcommand*{\Month}{10}
\newcommand*{\Day}{31}
\newcommand*\Weekdayname{{"Montag","Dienstag","Mittwoch",
"Donnerstag","Freitag","Samstag","Sonntag"}}
\newcommand*{\DCa}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCb}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCc}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCd}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCe}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCf}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCg}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCs}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCn}{}% Sicherstellen, dass dieses Makro noch frei ist.
\newcommand*{\DCcommon}[3]{%
\pgfmathtruncatemacro{\DCa}{#2<3 ? #1-1 : #1}%
\pgfmathtruncatemacro{\DCb}{
\pgfmathtruncatemacro{\DCb}{%
floor(\DCa/4)-floor(\DCa/100)+floor(\DCa/400)
}%
\pgfmathtruncatemacro{\DCc}{%
floor((\DCa-1)/4)-floor((\DCa-1)/100)+floor((\DCa-1)/400)
}%
\pgfmathtruncatemacro{\DCs}{\DCb-\DCc}%
\pgfmathtruncatemacro{\DCe}{#2<3 ? 0 : \DCs+1}%
\pgfmathtruncatemacro{\DCf}{#2<3 ?
#3-1+31*(#2-1) : #3+floor((153*(#2-3)+2)/5)+58+\DCs}%
}
\newcommand*{\DCcommonii}[3]{%
\DCcommon{#1}{#2}{#3}%
\pgfmathtruncatemacro{\DCg}{mod(\DCa+\DCb,7)}%
% \d ist die Tagesnamen-Nummer (0=Monday, 1=Tuesday, etc.)
\pgfmathtruncatemacro{\DCd}{mod(\DCf+\DCg-\DCe,7)}%
}
% Kalenderwoche
% https://www.tondering.dk/claus/cal/week.php
\pgfmathdeclarefunction{CW}{3}{% CW(year, month, day)
\DCcommonii{#1}{#2}{#3}%
\pgfmathtruncatemacro{\DCn}{\DCf+3-\DCd}%
\pgfmathtruncatemacro{\DCcw}{%
\DCn<0 ? 53-floor((\DCg-\DCs)/5) : (\DCn>(364+\DCs) ? 1 : floor(\DCn/7)+1)
}%
\pgfmathparse{int(\DCcw)}%
}
\newcommand*{\CW}[3]{%
\pgfmathparse{CW(#1,#2,#3)}\pgfmathresult
}
% Tagesnummer pgfmath
% https://www.tondering.dk/claus/cal/week.php
% https://texwelt.de/wissen/fragen/23485/
\pgfmathdeclarefunction{DayNo}{3}{% DayNo(year,month,day)
\DCcommon{#1}{#2}{#3}%
\pgfmathparse{int(\DCf+1)}%
}
\newcommand*{\DayNo}[3]{%
\pgfmathparse{DayNo(#1,#2,#3)}\pgfmathresult
}
% Tagesname
\pgfmathdeclarefunction{DayName}{3}{% CW(year, month, day)
\DCcommonii{#1}{#2}{#3}%
\pgfmathparse{\Weekdayname[\DCd]}% Day name
}
\newcommand*{\DayName}[3]{%
\pgfmathparse{DayName(#1,#2,#3)}\pgfmathresult
}
\begin{document}
\Year-\Month-\Day{} liegt in Kalenderwoche \CW\Year\Month\Day, ist der
\DayNo\Year\Month\Day. Tag des Jahres und ein \DayName\Year\Month\Day.
\end{document}
[![Ergebnis][1]][1]
Den `\newcommand`-Teil für `\DCa` bis `\DCn` könnte man sich sparen, indem man sicherstellt, dass die Berechnungen und damit die Definitionen lokal zu einer Gruppe ausgeführt werden. Dazu muss man nur drei der Makros ändern:
\newcommand*{\CW}[3]{%
\begingroup\pgfmathparse{CW(#1,#2,#3)}\pgfmathresult\endgroup
}
\newcommand*{\DayNo}[3]{%
\begingroup\pgfmathparse{DayNo(#1,#2,#3)}\pgfmathresult\endgroup
}
\newcommand*{\DayName}[3]{%
\begingroup\pgfmathparse{DayName(#1,#2,#3)}\pgfmathresult\endgroup
}
Würde man das als Paket `datecalculation` implementieren, würde man den Präfix `\DC` natürlich sinnvollerweise durch etwas wie `\datecalc@` ersetzen und so die Chancen auf Eindeutigkeit weiter erhöhen. Da ich nebenbei auch noch für eine saubere Trennung von Definitionsteil (= Form) und Nutzung (= Inhalt) gesorgt habe, ist das Abtrennen als Paket ggf. denkbar einfach.
[1]: https://texwelt.de/wissen/upfiles/test_20190219_084406.png