Blog
Why Adding a Month to January 31st Is Trickier Than It Looks
A question with more than one defensible answer
"What's one month after January 31st?" looks like it should have a single, obvious answer. It doesn't — not because the question is malformed, but because "one month later" can genuinely be interpreted at least two different, both internally consistent ways, and different software, different people, and even different versions of the same software have landed on different answers.
The two competing interpretations
The first interpretation: treat "add one month" as a calendar-unit operation, moving to the same day-of-month in the next month. Since February doesn't have a 31st day (it has at most 29), this interpretation has to decide what to do when the target day doesn't exist — and the most common resolution is to clamp to the last valid day of the target month, giving February 28th (or 29th, in a leap year) as the answer.
The second interpretation: treat "add one month" as adding a fixed number of days approximating a month's average length — commonly 30 or 31 days. Adding 31 days to January 31st lands on March 3rd (or March 4th in a leap year, since February's extra day shifts the count), a date that isn't in February at all. Neither interpretation is objectively wrong; they're answering genuinely different underlying questions — "what's the equivalent date one calendar month later" versus "what date is roughly 30-31 days from now" — that happen to be phrased with the same words.
Why this matters beyond a single edge case
This isn't a narrow curiosity limited to January 31st specifically — any month-end date that doesn't exist in the following month triggers the same ambiguity. Adding a month to January 29th, 30th, or 31st all hit February's shorter length in most years; adding a month to March 31st, May 31st, August 31st, or October 31st all hit the following 30-day month (April, June, September, or November respectively). The specific dates involved change, but the underlying design decision — clamp, or roll forward — is the same one, and it needs to be made consistently across an entire system, not decided case by case.
Real-world contexts where this comes up constantly: subscription billing (a monthly charge starting on the 31st needs a defined behavior for the months it doesn't fit into), recurring calendar events (a "monthly meeting on the 31st" needs the same decision), and any age or duration calculation that adds whole months to a date — including several tools on this site, like the Half-Birthday & Milestone Finder's 6-month addition and the Retirement Countdown Calculator's year-and-month-based target-date derivation.
Which convention different systems actually use
There's genuinely no industry-wide consensus, which is exactly why this causes real friction when two systems that made different choices need to interoperate. Some date libraries clamp (matching the first interpretation above); others roll forward into the next month, effectively treating the operation as "add the target month's length in days" rather than "move to the same day-of-month." A calendar application scheduling "the 31st of every month" has to make an explicit design decision about what happens in February, April, June, September, and November — and different popular calendar and scheduling tools have made visibly different choices here over the years, which is part of why this specific edge case has a small but real history of user complaints and bug reports across the software industry.
The convention this site uses, and why
ReckonDay's Date Plus or Minus Days tool — and every other tool on the site that performs month or year-based date addition — uses the clamp convention: adding a month to January 31st in a non-leap year produces February 28th, not March 3rd and not February 31st (which doesn't exist as a valid date under any interpretation). This is stated explicitly on the tool's own page rather than left as a silent assumption, specifically because the ambiguity is real and worth flagging rather than something a user should have to discover by testing an edge case themselves.
The reasoning behind choosing clamp specifically: it more closely matches what most people intuitively mean by "the same date next month" — a monthly reminder, a monthly payment, a recurring appointment — where the intent is clearly about the day-of-month, not about a fixed day-count approximation. The roll-forward interpretation is more defensible when the actual intent is a fixed-length billing or scheduling cycle (like "every 30 days" rather than "the 31st of every month"), which is a genuinely different underlying question that a fixed day-count addition (rather than a calendar-month addition) answers more directly — which is exactly why this site also offers day-based and week-based addition as separate, explicit options alongside month-based addition, rather than trying to make one operation serve both purposes.
A related, equally tricky case: adding a year to February 29
The same ambiguity resurfaces when adding a whole YEAR rather than a month to a leap-day birth date. Someone born February 29, 2016, turning "one year older" in 2017 faces the identical clamp-or-roll-forward fork, just on an annual instead of monthly step: settle on February 28, or push to March 1. It's genuinely unresolved at a jurisdictional level — different places, and even individual contracts, have picked different answers for a leap-day person's observed birthday in a non-leap year, a question explored further in this site's Age & Birthday category content.
Testing whether a system got this right
A fast way to check which convention any given piece of date software actually uses: feed it exactly this case — add one month to January 31st — and read the result directly rather than digging through documentation that may never spell the behavior out explicitly. A clamped answer lands in February; an unclamped one overflows into March 2nd or 3rd, revealing that the software is really doing fixed-day-count addition labeled as "a month."