What about leap year? You hardcode the normal number of days in a month. This will cause rework as all cases are not coded for. Not sure of the answer just yet but came across this while researching it myself. Just saw the opportunities in the logic.