EDATE and EOMONTH functions in Excel
EDATE returns the date a number of months before or after a date; EOMONTH returns the last day of the month that many months away.
Months are awkward. They have 28, 29, 30 or 31 days, so "add a month" cannot be done by adding a fixed number of days. EDATE and EOMONTH do month arithmetic properly. They are the functions behind due dates, renewal dates, EMI schedules and month-end reports.
Syntax
=EDATE(start_date, months)=EOMONTH(start_date, months)| Argument | What it is |
|---|---|
start_date | The date to start from. |
months | How many months to move. Positive goes forward, negative goes back, 0 stays in the same month. |
Examples
Each result below is what Excel itself showed for the formula on the sample sheet.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Name | Born | Joined | Holiday |
| 2 | Anita | 19-Jul-1988 | 01-Apr-2019 | 26-Jan-2026 |
| 3 | Rohit | 30-Nov-1992 | 15-Jun-2020 | 04-Mar-2026 |
| 4 | Deepa | 29-Feb-1996 | 01-Sep-2021 | 15-Aug-2026 |
| 5 | Manoj | 05-Dec-1999 | 10-Jan-2022 | 02-Oct-2026 |
=EDATE(C2,6)Result: 01-Oct-2019Six months after joining on 01-Apr-2019.
=EDATE(C2,12*5)Result: 01-Apr-2024Five years later: 60 months.
=EDATE(C3,-3)Result: 15-Mar-2020A negative number goes back: three months before 15-Jun-2020.
=EDATE(DATE(2026,1,31),1)Result: 28-Feb-2026One month after 31 January. February has no 31st, so the answer is the last day of February.
=EOMONTH(C3,0)Result: 30-Jun-2020The last day of the same month as 15-Jun-2020.
=EOMONTH(C3,1)Result: 31-Jul-2020The last day of the following month.
=EOMONTH(C3,-1)+1Result: 01-Jun-2020The first day of the same month: the end of the previous month plus one day.
=DAY(EOMONTH(B4,0))Result: 29The number of days in the month. Deepa was born in February 1996, a leap year.
=EDATE(B2,12*60)Result: 19-Jul-2048The 60th birthday of someone born on 19-Jul-1988.
EDATE: the same day, some months away
EDATE moves a date by whole months and keeps the day of the month. 15 June plus one month is 15 July.
When the target month is too short for the day, EDATE returns the last day of that month. One month after 31 January is 28 February, or 29 February in a leap year. The fourth example shows this. Adding months with DATE would instead spill over into March.
For years, multiply by 12: =EDATE(A2,12*5) is five years on.
EOMONTH: the last day of a month
EOMONTH moves by months and then goes to the end of that month. The second argument works like this:
| months | Result |
|---|---|
| 0 | last day of the same month |
| 1 | last day of next month |
| -1 | last day of the previous month |
Because the first day of a month is one day after the end of the month before, EOMONTH gives month starts too:
- first day of this month:
=EOMONTH(A2,-1)+1 - first day of next month:
=EOMONTH(A2,0)+1
Format the result
Both functions return a date as a plain number. If you see something like 43739, the cell is not formatted as a date. Select it and choose a date format.
Uses
Due dates and renewals. A subscription that renews every three months: =EDATE(A2,3). A warranty of two years: =EDATE(A2,24).
A schedule of monthly instalments. Put the first date in A2 and =EDATE(A2,1) below it, copied down. Each instalment falls on the same day of the next month.
Payment at month end. "Due at the end of the month after the invoice": =EOMONTH(A2,1).
Retirement and milestone dates. The 60th birthday is =EDATE(B2,12*60). Many employers retire staff on the last day of that month: =EOMONTH(B2,12*60).
A month's range for SUMIFS. With any date of the month in H1, the total for that month is =SUMIFS(amounts, dates, ">="&EOMONTH(H1,-1)+1, dates, "<="&EOMONTH(H1,0)).
Days in a month. =DAY(EOMONTH(A2,0)) returns 28, 29, 30 or 31, and takes care of leap years.
Months elapsed in the financial year. With April as the start, EDATE and EOMONTH give period ends without a lookup table.
Months between two dates
EDATE adds months. To count the months between two dates, use DATEDIF with the unit "M".
Common mistakes
- Reading the result as a number because of the cell format.
- Giving a fraction of a month. The months argument is cut down to a whole number, so 1.9 counts as 1.
#VALUE!when the start date is text.- Expecting EDATE of a month-end to stay at month-end. EDATE keeps the day number: one month after 28 February is 28 March, not 31 March. Use EOMONTH when you always want the last day.
In Google Sheets
EDATE and EOMONTH are the same in Google Sheets.
Related functions
- DATEDate and time
- DATEDIFDate and time
- TODAY and NOWDate and time
- YEAR, MONTH and DAYDate and time
- NETWORKDAYS and WORKDAYDate and time
Every result on this page was calculated in Microsoft Excel (version 16.0, build 20326) on 12 November 2026, not typed by hand.
This is an independent help site. It is not connected with or approved by Microsoft. Excel and Microsoft 365 are trademarks of Microsoft Corporation, named here only to say which program a formula is for. The people and figures in the sample sheets are made up.