Hallo und erstmal danke an alle Beteiligten, dass Ihr Euch meinen Kopf ein wenig mit zerbrecht!
Das sind schon wieder so viele gute Gedanken dabei, deshalb nochmal danke an jeden Einzelnen hier.
da wirst Du recht haben, es wird eine Kombination aus Wochennummer und Jahr sein. Aber nicht zwingend das aktuelle Jahr, gerade dann nicht, wenn X sich dem Jahresende nähert. Interessant ist, ob bei einem Y von "KW 33/2020" nur 33/2020 wichtig ist oder auch 33/2019 und 33/2018.
Ich hatte verschiedene Szenarien durchgespielt, hierunter eines, das ausschließlich KW33/2020 (auf obiges Bsp. bezogen) plus ggf. max. weitere 3 KW berücksichtigt, die der User in seinem Profil als anzuzeigenden Zeitraum festgelegt hat. Hiervon bin ich inzwischen wieder abgerückt, weil dieses Szenarium im weiteren Verlauf die Anzahl der db-Zugriffe unglaublich aufblähen würde. Performanter scheint mir da zu sein (und das ist aktueller Stand), dass (wieder auf obiges Bsp. bezogen) alle KWs von heute bis zur KW33/2020 relevant sein sollen. Das macht zwar im ersten Schritt sehr viele db-Einträge aus, aber im 2. Schritt (und der wird deutlich öfter ausgeführt) nur einen einzigen db-Zugriff, da ich für jede Regel den zeitpunkt festhalte, bis wann sie bereits abgehandelt wurde.
Was mich von Pit interessiert, ist, ob Z+nX mit X=Tag|Woche|Monat|Jahr ausreicht. Gerade bei X=„Woche“ kann ich mir vorstellen, dass es Termine gibt, die sich alle 2 oder 4 Wochen wiederholen. Bei Monats- und Jahresrhythmen frage ich mich, ob da der Zyklusbruch Woche/Monat relevant wird. Was ist mit Terminen wie "am 1. Dienstag im Monat"?
Bisher hätte ich "Z+nX mit X=Tag|Woche|Monat|Jahr" bejaht, aber Du hast recht, einige (durchaus nützliche und auch gängige) Terminvarianten würde ich damit außer Acht lassen 😟
Den ersten Tag einer Kalenderwoche kann man mit setISODate bestimmen.
Mache ich bisher so: strtotime("{$jahr}-W{$kalenderwoche}")
Die Sonderfälle, die Du bei der TiM oder TiJ Rechnung bekommst, dürftest Du loswerden wenn Du mit Julianischen Tagen arbeitest -> cal_to_jd.
Damit kenne ich mich mal so gar nicht aus... 😟
Pit