Monatliche Termine beginnend am 31. Januar
Ein Monatsplan für den 31. Januar erfordert eine explizite Regel für fehlende Daten, da es im Februar keinen 31. gibt. Wenn das Monatsende ausgewählt ist, sind die ersten vier Daten der 31. Januar, der 28. Februar, der 31. März und der 30. April im Jahr 2026; Wenn „Überspringen“ ausgewählt ist, werden der Februar und alle zweiten Monate ohne 31. weggelassen.
Der Kalender
Ein standardbasiertes ganztägiges VEVENT pro Zeile, mit exklusiven DTEND-Werten für den nächsten Tag und stabilen Ereigniskennungen.
Jedes Datum im Zeitplan
| 1 | 2026-01-31 | Saturday | 0 | Anchor date |
| 2 | 2026-02-28 | Saturday | 28 | Moved to month end |
| 3 | 2026-03-31 | Tuesday | 59 | Exact anchor day |
| 4 | 2026-04-30 | Thursday | 89 | Moved to month end |
| 5 | 2026-05-31 | Sunday | 120 | Exact anchor day |
| 6 | 2026-06-30 | Tuesday | 150 | Moved to month end |
| 7 | 2026-07-31 | Friday | 181 | Exact anchor day |
| 8 | 2026-08-31 | Monday | 212 | Exact anchor day |
| 9 | 2026-09-30 | Wednesday | 242 | Moved to month end |
| 10 | 2026-10-31 | Saturday | 273 | Exact anchor day |
| 11 | 2026-11-30 | Monday | 303 | Moved to month end |
| 12 | 2026-12-31 | Thursday | 334 | Exact anchor day |
Jeder Kandidat wird vom ursprünglichen Tag 31 abgeleitet, sodass der 28. Februar nicht dazu führt, dass sich der März am 28. wiederholt.
Der Monatsendmodus meldet jedes verkürzte Vorkommen in der Anpassungsspalte.
Im Skip-Modus wird so lange nach Kandidatenmonaten gesucht, bis die gewünschte Anzahl tatsächlicher Daten erreicht ist.
So funktioniert es
So wird es gemacht
- Analysieren Sie das erste Datum als gregorianischen Kalenderanker und binden Sie dann das Intervall und die angeforderte Anzahl der Vorkommen ein, bevor Sie den Zeitplan zuweisen.
- Fügen Sie für Tage und Wochen eine feste Anzahl von UTC-Kalendertagen hinzu. Leiten Sie für Monate und Jahre jeden Kandidaten aus dem ursprünglichen Jahr, Monat und Tag und nicht aus dem vorherigen Ergebnis ab.
- Wenn in einem Kandidatenmonat der Ankertag fehlt, verwenden Sie entweder seinen letzten Tag oder lassen Sie diesen Kandidaten weg, genau wie ausgewählt. Fahren Sie fort, bis die gewünschte Anzahl tatsächlicher Termine erstellt wurde.
- Schreiben Sie die Zeilen als separate RFC 5545 ganztägige VEVENT-Komponenten. DTSTART ist das Datum selbst, DTEND ist das folgende Datum, da ein ganztägiges Ende ausgeschlossen ist, und jede Inhaltszeile wird auf 75 UTF-8-Oktette gefaltet.
Wovon es ausgeht
- Der Kalender ist gregorianisch und enthält nur das Datum. Es gibt keine Tageszeit, Zeitzone, Sommerzeitumstellung oder Erinnerung, auf die man schließen könnte.
- Das erste Datum zählt als Ereignis eins. Zwölf Daten enthalten daher elf Intervalle, nicht zwölf.
- Der Monatsendmodus ändert nie den Anker. Der 31. Januar kann zum 28. Februar werden und dann zum 31. März zurückkehren, da jeder Kandidat vom ursprünglichen Tag 31 abgeleitet ist.
- Im Skip-Modus wird ein fehlender Kandidat übersprungen, kein Intervall. Dies wird über spätere Kandidatenmonate oder -jahre hinweg fortgesetzt, bis die angeforderte Anzahl tatsächlicher Daten vorhanden ist.
- Kalenderjahre über 9999 können nicht durch den vierstelligen DATE-Wert von RFC 5545 dargestellt werden und werden nicht ausgegeben.
Fragen
Warum unterscheidet sich das wiederholte Hinzufügen eines Monats von der Verwendung eines Ankertags?
Wenn der 28. Februar als Eingabe für die nächste Addition dient, kann jeder spätere Monat am 28. bleiben. Die Ableitung jedes Datums vom ursprünglichen Anker am 31. Januar verhindert diese dauerhafte Abweichung.
Was passiert im Jahresplan mit dem 29. Februar?
Der Monatsendmodus verwendet in Nicht-Schaltjahren den 28. Februar und kehrt in Schaltjahren zum 29. Februar zurück. Der Überspringmodus umfasst nur Jahre, in denen der 29. Februar existiert.
Quellen
Die vollständige Methode, das Rechenbeispiel und alle Annahmen hinter diesem Ergebnis stehen auf Planer für wiederkehrende Termine.