You just increment the month. March 20 m+1 is April 20.
If the date is invalid, like January 30 m+1 then you fallback to next valid date, February 28/29.
If the date is invalid, like January 30 m+1 then you fallback to next valid date, February 28/29.
Edit: but perhaps that’s the custom used at many places and I’m just not aware.
For example, "every month on the 15th", "every month on the 1st", etc. It makes it easier to figure out compared to "every 30 days" or "every month on the 30th, unless there are less than 30 days in the month"