EDATE
Move a date forward or backward a number of months, clamping to the month's end.
Syntax
EDATE(start_date, months) | Argument | Required | Description |
|---|---|---|
start_date | Required | The date to shift. |
months | Required | How many months. Negative goes backwards. |
Examples
Every example below was executed against VisiGrid engine 0.35.0 — not
transcribed from another vendor's documentation. Reproduce any of them with vgrid calc.
| Formula | Result | Notes |
|---|---|---|
=EDATE(DATE(2024,1,31),1) | 45351 | 31 January plus one month is 29 February, not 31 February. |
=DAY(EDATE(DATE(2024,1,31),1)) | 29 | |
=EDATE(DATE(2024,3,15),-1) | 45337 | Negative months go backwards. |
Why not just add 30 days
Because months are not 30 days, and the error compounds. Twelve additions of 30 days lands five days short of a year, which turns a payment schedule into a slowly drifting one.
EDATE moves by calendar months and clamps when the target month is shorter:
=EDATE(DATE(2024,1,31), 1) → 29 February 2024
Not 2 March, and not an error. That is the behaviour a monthly billing date needs — though note it is not reversible. Shifting back a month from 29 February gives 29 January, not the 31st you started from.
Building a schedule
EDATE(start, ROW()-1) down a column produces successive monthly dates from one
formula, each anchored to the original date rather than to the row above it.
Anchoring to the start is what stops the drift.
Excel compatibility
Matches Excel, including clamping to the last day of a shorter month.