EDATE returns the same day of the month, a specified number of months before or after a start date. Use it to calculate due dates, renewal dates, and maturity dates without manual month counting.
=EDATE(start_date, months)What does EDATE do?
EDATE is a Date & Time function that takes a starting date and a number of months, then returns the date that many months later (or earlier, if you use a negative number). It keeps the same day of the month whenever possible, so 15 January plus one month becomes 15 February. If the target month is shorter, Excel adjusts to the last valid day, so 31 January plus one month becomes 28 February (or 29 February in a leap year).
This matters because adding months by hand is error-prone. Month lengths vary, leap years appear, and business rules often say things like "due in 90 days" or "renew annually." EDATE handles all of that in one step and returns a real Excel date that you can format, sort, and compare. It also works with negative month values, so you can look backwards just as easily as forwards.
A common real situation is a subscription or service contract. You have a start date and a term in months, and you need the exact renewal date for each customer. Instead of counting on a calendar, you enter =EDATE(start_date, term_months) and copy it down the column. The result is the same calendar day, months later, ready for reminders or billing.
When to use EDATE
- Calculating contract renewal dates from a start date and term length.
- Working out invoice or payment due dates that are a set number of months after issue.
- Finding equipment warranty or service expiry dates.
- Projecting loan or savings maturity dates.
- Scheduling employee probation or review dates.
- Looking back to a date several months before a reference date.
EDATE syntax
=EDATE(start_date, months)| Argument | Required? | What to enter |
|---|---|---|
start_date | Required | The date you want to start from. It can be a cell reference, a date entered with DATE, or a date serial number. Example: A2 where A2 contains 2024-01-15. |
months | Required | The number of months to add. Use a positive number to go forward, a negative number to go backward, and 0 to return the same date. Example: 12 for one year later. |
What it returns: A date serial number representing the same day of the month, the specified number of months after (or before) start_date. Excel displays it as a date when the cell is formatted as a date.
EDATE examples
1 Add one month to a single date
Start with a simple case: one project start date and a one-month follow-up. The goal is to find the date one month after 15 January 2024. =EDATE(B2, 1) reads the date in B2 and adds one month, keeping the same day. It returns 15 February 2024, which Excel stores as a date serial number and displays as a date.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Project | Start Date | |||
| 2 | Website redesign | 2024-01-15 | 2024-02-15 | ||
| 3 |
2 Subtract months to find a review date
Sometimes you need to look backwards. Here a policy has an effective date, and the team wants a review date three months before it. =EDATE(B2, -3) subtracts three months from 30 June 2024. Because April has 30 days, the result is 30 March 2024, the same day of the month. Negative month values make EDATE useful for planning backwards from a deadline.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Policy | Effective Date | |||
| 2 | Data retention policy | 2024-06-30 | 2024-03-30 | ||
| 3 |
3 Handle the end of a short month
Month lengths are not equal, and EDATE respects that. A subscription starts on 31 January 2024 and renews monthly. =EDATE(B2, 1) tries to return 31 February, which does not exist, so Excel returns the last day of February: 29 February 2024 because it is a leap year. This automatic adjustment prevents invalid dates and is one of the main reasons to use EDATE instead of manual date arithmetic.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Customer | Start Date | |||
| 2 | Acme Ltd | 2024-01-31 | 2024-02-29 | ||
| 3 |
4 Calculate contract renewal dates from a term
A realistic business case: each customer has a start date and a contract term in months, and you need the renewal date. =EDATE(B2, C2) uses the start date in B2 and the term in C2. For a 12-month term starting 10 March 2023, it returns 10 March 2024. For a 24-month term starting 1 July 2022, it returns 1 July 2024. Copying the formula down gives every renewal date in one step.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Customer | Start Date | Term (months) | |||
| 2 | Northwind | 2023-03-10 | 12 | 2024-03-10 | ||
| 3 | Contoso | 2022-07-01 | 24 | |||
| 4 | Fabrikam | 2023-11-15 | 6 | |||
| 5 |
5 Find an invoice due date with a month-based term
Invoices often have payment terms expressed in months, such as net 30 or net 2 months. Here the invoice date is in B2 and the term in months is in C2. =EDATE(B2, C2) adds the term to the invoice date. An invoice dated 5 April 2024 with a 2-month term is due 5 June 2024. The formula returns a clean date you can use for aging reports or reminders.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Invoice | Invoice Date | Term (months) | |||
| 2 | INV-1001 | 2024-04-05 | 2 | 2024-06-05 | ||
| 3 | INV-1002 | 2024-01-31 | 1 | |||
| 4 | INV-1003 | 2023-12-15 | 3 | |||
| 5 |
Common EDATE errors and how to fix them
| Error | Why it happens | How to fix it |
|---|---|---|
| #VALUE! | start_date is text that Excel cannot interpret as a date, or months is not a number. | Make sure start_date is a real date or a cell formatted as a date. Enter dates with DATE or in a recognised format, and check that months is numeric. |
| #NUM! | The result would be an invalid date, for example a start date before 1 January 1900 or a very large month offset. | Check the start date and the months value. Keep the result within Excel's supported date range. |
| Formula shows a number instead of a date | The cell is formatted as General or Number, so Excel displays the date serial number. | Select the cell and apply a Date format from the Number Format list or the Format Cells dialog. |
| Unexpected day of month | The start date is the 29th, 30th, or 31st and the target month is shorter, so EDATE returns the last day of that month. | This is normal behaviour. If you need a fixed day, combine EDATE with DATE and DAY, or adjust the start date. |
Tips for using EDATE
- Use negative months to look backwards, for example
=EDATE(A2, -6)for six months before a date. - Format the result cell as a date; otherwise you may see a five-digit serial number.
- Combine EDATE with TODAY to calculate dates relative to today, such as
=EDATE(TODAY(), 3). - Remember that EDATE keeps the same day of the month where possible and rolls to the month end when the day does not exist.
- Use a cell reference for the months argument so you can change the term without editing the formula.
Frequently asked questions
What is the difference between EDATE and EOMONTH?
EDATE returns the same day of the month, months later. EOMONTH returns the last day of the month, months later. Use EDATE for anniversaries and renewal dates, and EOMONTH for month-end reporting.
Can EDATE subtract months?
Yes. Use a negative number for the months argument, for example =EDATE(A2, -3) to go three months back.
Why does EDATE return the last day of February for a 31 January start?
Because 31 February does not exist. EDATE adjusts to the last valid day of the target month, which is 28 or 29 February depending on the year.
Does EDATE work with times?
EDATE works with dates. If the start date includes a time, the time portion is ignored and the result is a date at midnight.
Related functions
Every example on this page was recalculated by SheetSkill’s spreadsheet engine. EDATE reference