Questo tipo di problema è un tale campo minato di casi limite che delegherei sempre la logica a qualcosa come IceCube (https://github.com/seejohnrun/ice_cube ). È fatto per gestire questo tipo di pianificazioni ricorrenti e viene fornito con un facile supporto per la serializzazione, ecc. Anche se richiede un piccolo ripensamento su come fai le cose, ti consiglio vivamente di usarlo.