I have an issue where all monthly auto-renew members expire on the day that they will be charged. The payprocessor charges on the same day of the month that the membership was created. eg. 01/08/16, 02/08/16, 03/08/16 etc. but it may happen at 11pm....it's never the same time of day per customer. This leaves the members in an expired state since Civicrm api job process_membership expires the membership on that same day, the "end_date". I'd say that's clearly unwanted behavior for an auto-renew member! Civi calculates the end_date by incrementing the month by 1. But the end_date should be padded by a day if a member is to get a whole month of uninterrupted membership.
Is there a way to define a month, or otherwise work around this within the UI?
end_date seems like an unfortunate choice for field name, since it falls within the date range of membership but apparently is definitely not being treated like the other days in that range. IMHO, valid_through makes a lot more sense since it's more clear as to how it should be treated.
It seems like there are two options. 1) redefine the monthly membership period as month++ day++ or 2) reconceptualize end_date as valid_through and expire when that day is over. Even though I think #2 makes more sense, I think #1 may be easier. I've tested the daily member and it doesn't expire on the "end_date",...I'm thinking there's a check to see if the end_date is equal to the current date or start_date.