Worst case performance 525 600 iterations (moving through a full year).
Worst case performance 525 600 iterations (moving through a full year). Or actually 4 times that if scheduling something on the 28th of february.
Could probably do something much more clever here.
The time when it should run the next time after the 'now' timestamp, or 'None' if it will never occur again.
A description of what is wrong if something is wrong