EDATE / EOMONTH / WORKDAY
Three ways to move a date forward or back by whole months, or by a number of working days.
EDATE keeps the same day of the month when it shifts a date (January 15 plus one month lands on February 15), while EOMONTH always jumps to the last day of whichever month it lands on, the one to reach for a billing cutoff, a report date, or anything that's meant to always land on month-end rather than a specific day number. When EDATE's target month is shorter than the start day, January 31 plus one month, since February has no 31st, it clamps to that month's actual last day rather than erroring out. WORKDAY automatically skips Saturdays and Sundays, the same weekend-aware counting that NETWORKDAYS uses from the other direction.
Syntax
| Argument | Description |
|---|---|
| start_date | Required for all three. The date to count from. |
| months | EDATE/EOMONTH: Required. How many months forward (positive) or back (negative) to move. |
| days | WORKDAY: Required. How many working days forward (positive) or back (negative) to move, skipping weekends automatically. |
| holidays | WORKDAY: Optional. A range of extra dates to also skip, beyond weekends. |
A real example: a billing cutoff that always lands on month-end
A recurring billing date that always needs to fall on the last day of the following month, regardless of what day of the month today happens to be:
EDATE would instead keep today's day number and land one month out on that same day number; EOMONTH deliberately ignores the day number entirely and always resolves to a true month-end date.
Worked examples
| A | |
|---|---|
| 1 | Started |
| 2 | 2026-01-15 |
| A | |
|---|---|
| 1 | Today |
| 2 | 2026-01-10 |
| A | |
|---|---|
| 1 | Start |
| 2 | 2026-03-02 |
Common mistakes
- Reaching for EDATE when the real goal is "end of next month": EDATE keeps the same day number, EOMONTH always lands on the last day.
- Adding 30 to a date by hand to approximate "one month later." Months vary from 28 to 31 days; EDATE gets the actual calendar month right every time.
- Forgetting WORKDAY already skips weekends on its own; adding extra days "to account for the weekend" on top of it overshoots the real deadline.
Related functions
Try it yourself
A free, graded practice exercise using this exact function: instant feedback, no signup required.
Practice date-shifting functions →