EDATE and EOMONTH: Add Months and Find Month-End
By ExcelReady TeamUpdated 6 min read
The short answer
EDATE moves a date by whole months: =EDATE(start_date, months) keeps the day where it can, so Mar 15 plus 12 months is Mar 15 next year. EOMONTH moves by months and then jumps to the month's last day: =EOMONTH(B2,0) is the end of B2's month. Negative months go backwards.
Key takeaways
- EDATE(start_date, months) returns the same day a number of months away, or the month's last day if that day doesn't exist.
- EOMONTH(start_date, months) returns the last day of the month a number of months away; 0 means the same month.
- EOMONTH(B2,0)+1 is the first day of next month; EOMONTH(B2,-1)+1 is the first day of this month.
- DAY(EOMONTH(B2,0)) gives the number of days in the month, including 29 in a leap-year February.
- Both return serial numbers, so format the cells as dates.
On this page+
- What do EDATE and EOMONTH do?
- How to add months to a date with EDATE
- How to use Excel EOMONTH to find the end of the month
- How to find the first day of the month
- How to count the days in a month
- How to find the end of the quarter
- What are the common EDATE and EOMONTH mistakes?
- What to do with the dates next
- Practise it
Excel EOMONTH finds the last day of a month, and EDATE adds or subtracts whole months. Together they handle renewal dates, payment due dates, month-end reports and "first day of next month" questions. This guide shows how each works, the patterns interviewers like to ask about, and the month-length traps that catch people who add days instead.
What do EDATE and EOMONTH do?#
Both move a date by a number of whole months. The difference is where they land:
| Function | Syntax | Lands on | Jan 31, 2024 plus 1 month |
|---|---|---|---|
| EDATE | =EDATE(start_date, months) | The same day of the month | Feb 29, 2024 |
| EOMONTH | =EOMONTH(start_date, months) | The last day of the month | Feb 29, 2024 |
They agree here only because January 31 is itself a month-end. From Mar 15, 2024, EDATE with 1 month gives Apr 15, and EOMONTH gives Apr 30.
Both return a date serial number, the number Excel uses to store a date. If you see something like 45351, the value is right; apply a date format with Ctrl+Shift+# (Windows) or Control+Shift+# (Mac). How the date then looks, such as 2/29/2024 or 29/02/2024, depends on your regional settings.
How to add months to a date with EDATE#
Use EDATE for anything "a number of months later": renewals, probation periods, payment terms. It handles months of different lengths for you:
=EDATE(B2,C2)| Client | Start Date | Term (Months) | Renewal =EDATE(B2,C2) |
|---|---|---|---|
| Northwind Labs | Jan 31, 2024 | 1 | Feb 29, 2024 |
| Bluefin Media | Mar 15, 2024 | 12 | Mar 15, 2025 |
| Cedar Health | May 6, 2024 | 6 | Nov 6, 2024 |
| Harbor Foods | Oct 3, 2024 | 3 | Jan 3, 2025 |
| Summit Legal | Nov 29, 2024 | 12 | Nov 29, 2025 |
Look at Northwind. February 2024 has no 31st, so EDATE stops at the last day of February. Adding 30 days instead,
=B2+30, gives March 1, and the error grows with every month you add.
Two more details:
- Negative months go backwards.
=EDATE(B2,-6)is six months earlier. - Decimals are cut off.
=EDATE(B2,1.9)adds 1 month, not 2.
A contract that starts on Mar 15 usually ends the day before its renewal: =EDATE(B2,C2)-1 gives Mar 14 of the next
year.
How to use Excel EOMONTH to find the end of the month#
EOMONTH moves a number of months and then jumps to that month's last day. The months argument is required, and 0 means "this month":
=EOMONTH(B2,0)| Start Date | =EOMONTH(B2,0) | =EOMONTH(B2,1) | =EOMONTH(B2,-1) |
|---|---|---|---|
| Jan 31, 2024 | Jan 31, 2024 | Feb 29, 2024 | Dec 31, 2023 |
| Mar 15, 2024 | Mar 31, 2024 | Apr 30, 2024 | Feb 29, 2024 |
| Nov 29, 2024 | Nov 30, 2024 | Dec 31, 2024 | Oct 31, 2024 |
Finance teams use this for month-end close dates and "due at the end of next month" terms. It's also the cleanest
end point for monthly totals: "<="&EOMONTH(F5,0) in SUMIFS covers the whole month without you knowing how many days
it has. See how to sum values between two dates.
How to find the first day of the month#
There's no "start of month" function, but EOMONTH gets you there in one step. Find a month-end and add 1 day:
| Goal | Formula | Result for Mar 15, 2024 |
|---|---|---|
| First day of next month | =EOMONTH(B2,0)+1 | Apr 1, 2024 |
| First day of this month | =EOMONTH(B2,-1)+1 | Mar 1, 2024 |
| First day of last month | =EOMONTH(B2,-2)+1 | Feb 1, 2024 |
Adding 1 works because dates are numbers that count days. The "first day of next month" formula is a classic interview question, because it's short and works for every month length.
How to count the days in a month#
Wrap EOMONTH in DAY. The last day's number is the number of days in that month:
=DAY(EOMONTH(B2,0))For any date in February 2024 this gives 29, because 2024 is a leap year. For February 2025 it gives 28, and for April
it gives 30. This is handy for daily averages, like =C2/DAY(EOMONTH(B2,0)) for a monthly total spread over its days.
How to find the end of the quarter#
Quarters end in March, June, September and December. This formula works out how many months away the quarter-end is, then lets EOMONTH do the rest:
=EOMONTH(B2,MOD(3-MONTH(B2),3))For Feb 10, 2024 it gives Mar 31, 2024. For May 6, 2024 it gives Jun 30, 2024. MONTH and the other date-part functions are explained in DATE, YEAR, MONTH and DAY in Excel.
What are the common EDATE and EOMONTH mistakes?#
| Mistake | What happens | Fix |
|---|---|---|
=B2+30 for "one month later" | Drifts off the right day | =EDATE(B2,1) |
=EOMONTH(B2) with no months | Excel won't accept it | Add ,0 |
| EDATE from a month-end, like Feb 29 plus 1 | Mar 29, not Mar 31 | Use EOMONTH for month-ends |
| Result shows as 45351 | It's a serial number | Apply a date format |
| Start date stored as text | #VALUE! | Convert it to a real date |
The month-end trap is worth remembering. If your dates are always month-ends, like payroll or billing dates, use EOMONTH(B2,1) to step forward. EDATE keeps the day number, so if each date is built from the one before, it can drift from the 31st down to the 29th and stay there.
What to do with the dates next#
Once you have renewal or due dates, the next questions are usually about the calendar:
- Does it land on a weekend? Use WEEKDAY. See how to find weekends and day names.
- How many working days until then? Use NETWORKDAYS. See NETWORKDAYS and WORKDAY.
- How long has a customer or employee been with you? See how to calculate age or years of service.
Practise it#
Try the days-in-month exercise on this page, then practise EDATE, EOMONTH and WEEKDAY in a live spreadsheet. You'll find renewal dates, month-ends and next-month starts for real contracts, then check which renewals fall on a weekend.
Try it yourself
This is a live spreadsheet. Type the formula in the green cell and press Enter.
How many days are in each month? EOMONTH finds the month's last day, and DAY reads its day number. In C2, type =DAY(EOMONTH(B2,0)) and press Enter. 2024 is a leap year, so February has 29 days.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Days in Month | |||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | ||||
| 7 | ||||
| 8 |
Tip: Work from the inside out: EOMONTH(B2,0) is the last day of B2's month, and DAY of that date is the number of days.
Practise this in a lesson
Frequently asked questions
How do I add months to a date in Excel?
Use EDATE: =EDATE(B2,3) is three months after the date in B2. Adding 30 or 90 days instead drifts, because months have different lengths.
How do I get the last day of the month in Excel?
Use =EOMONTH(B2,0). The 0 means the same month as B2. Use 1 for the end of next month, or -1 for the end of last month.
How do I get the first day of the month?
Use =EOMONTH(B2,-1)+1. It finds the end of last month and adds one day. =EOMONTH(B2,0)+1 gives the first day of next month.
Why does EOMONTH show a number like 45322?
EOMONTH returns a date serial number, and the cell has the General format. Apply a date format with Ctrl+Shift+# or from the Home tab.
How do I subtract months from a date?
Use a negative number of months: =EDATE(B2,-6) is six months before B2, and =EOMONTH(B2,-1) is the last day of the previous month.