The best way to calculate the end of the current month in a piece of code is:
- Hardcode the numbers
- Use a module or function
- Add a month, and subtract the current day
- Add a month, truncate the day, and subtract 1
- Add 1 to the day, test it's legality, and loop until it fails
- Use a default of 30.4 days (30.4167, 30.4375, or 30.43729167)
- Use 28 days for every month and ignore any days that come that
- Issue an update (nearly) every month to fix it for the current month
Somewhat related to: How do you remember the number of days in each month?