Wie so häufig bzgl. Datumsroutinen, es wird immer wieder neu gerechnet.
Die Beste Lösung ist hier immer noch die Kalenderdatei, die alle gewünschten Informationen und Formate sowie die dazugehörenden Indizes enthält, wenn etwas fehlt lässt es sich leicht ergänzen.
Zusätzlich kann diese Datei/Tabelle auch in Joins für sinnvolle Abfragen/Eingrenzungen verwendet werden.
Gültigkeitsprüfungen und Umrechnungen sind dann mittels simplen Chain/Select zu erledigen.