Natural language recurrence is probably the #1 hardest algorithm I have ever worked with.
I used TatSu and a PEG grammer to compile down to a set of constraint objects(Like daily or at 3pm or on the 3rd of the month) that can basically be asked "When is the next match after X" until they all just return X, and you know you have a match.
[1] https://github.com/wanasit/chrono