The EOMONTH and EDATE functions in Excel
EOMONTH (end of month) returns the last day of the month, a number of months away from a date: 0 for the same month, 1 for the next, -1 for the previous. It's the standard way to calculate "due at the end of the month".
EDATE moves a date by whole months and keeps the day: contract renewals, subscription dates, warranty ends. When the day doesn't exist in the target month, it uses the month's last day.
Syntax
=EOMONTH(start_date, months)
| Argument | What it means |
|---|---|
| start_date | The date to start from. |
| months | How many months forward (positive) or back (negative). EDATE takes the same two arguments. |
Examples
1. End of the same month
| A | B | |
|---|---|---|
| 1 | Sent | 2026-02-10 |
| 2 | Due | 2026-02-28 |
The last day of February 2026: 2026-02-28.
2. End of next month
| A | B | |
|---|---|---|
| 1 | Sent | 2026-02-10 |
| 2 | Due | 2026-03-31 |
"Payment due end of the following month": 2026-03-31.
3. Three months later: EDATE
| A | B | |
|---|---|---|
| 1 | Start | 2026-02-10 |
| 2 | Renewal | 2026-05-10 |
Same day, three months on: 2026-05-10.
4. EDATE at the end of a month
| A | B | |
|---|---|---|
| 1 | Start | 2026-01-31 |
| 2 | +1 month | 2026-02-28 |
February has no 31st, so EDATE uses the last day: 2026-02-28. Adding 30 days instead would land on March 2.
Common mistakes
Adding 30 days for "one month". Months have 28 to 31 days, so dates drift.
Fix: Use EDATE for whole months.
The result shows as a number like 46081.
Fix: Give the cell a date format.
Frequently asked questions
How do I get the first day of a month?
The day after the end of the previous month: =EOMONTH(B1,-1)+1.
How many days does a month have?
=DAY(EOMONTH(B1,0)) returns the last day's number: 28, 29, 30 or 31.