Well for more advanced scenarios you should probably try to use ical format since you can type out what you want manually as I can’t think how I’d display negative values for BYDAY in the calendar right now.
And that is because in the past calendar module would write out a database entry for every event. Now it always parses the ical file on the fly. Which means one can go modify the ical entry in the database to also do the same thing.
I’m not you but typically if I were going to add entries like memorial day it sounds like you are setting up a holiday calendar, so why do all of that work? There are free ical examples online of US holidays and you can just use those in FreePBX calendar instead.
The issue with using public calendars that I have is decently straightforward. Will it always exist? Will it always have only the holidays I want?
Edit: back before FreePBX was so easy to upgrade versions, I did not care about things like this because I never simply upgraded. It was always a build new and reconfigure scenario. Of course calendar is decently new functionality too.
How would you word that? “last day of month”? I guess? But you could also do BYDAY=-2MO which would be two Mondays from the end. I guess you need a reverse button?
The library that parses RRULE does a pretty good job it probably supports negatives there. The generator does too but its all about how to display that in a way that makes sense to a user to generate it out. I guess the only way I see it working is somehow declaring “reverse” something like that