EDATE Function: Add or Subtract Months from Dates

EDATE Function in Excel feature image for tutorial blog
Learn how to use the EDATE function in Excel to add or subtract months from dates. Covers contract renewals, payment schedules, leap years, and EDATE vs EOMONTH. This is an interesting function which is helpful in multiple occasion for data analyst, finance professionals, students and teachers.

The EDATE function adds or subtracts a set number of months from any date. It always lands on the same day of the month. For example, adding 3 months to 15 January gives 15 April. You do not need to worry about month lengths, year rollovers, or leap years. Excel handles all of that automatically. This makes EDATE the right tool for contract renewals, payment schedules, warranty dates, and subscription cycles.

Availability: EDATE works in all Excel versions from Excel 2007 onwards, including Microsoft 365, Excel 2024, 2021, 2019, and 2016.

What Is the EDATE Syntax?

The EDATE function takes just two arguments. The syntax is short and easy to remember.

=EDATE(start_date, months)
ArgumentRequired?What it does
start_date Required The date you want to move forward or backward from. Use a cell reference, the DATE() function, or TODAY(). Do not type dates as plain text — Excel may not read them correctly.
months Required How many months to move. Use a positive number to move forward in time. Use a negative number to move backward. Decimals are ignored — 2.9 behaves the same as 2.
Format the result as a date: EDATE returns a date serial number by default. If you see a number like 46278 instead of a date, press Ctrl+1 and choose a Date format. You can also wrap EDATE in TEXT() for a formatted string: =TEXT(EDATE(A2,3),"DD-MMM-YYYY").

How Does EDATE Handle Month-End Dates?

EDATE handles tricky month-end dates well. When you add one month to 31 January, the result is 28 February (or 29 in a leap year). There is no such date as 31 February, so Excel snaps to the last valid day. Similarly, adding one month to 30 November gives 30 December, not 31 December. This behaviour is consistent and predictable.

=EDATE(DATE(2026,1,31), 1) → 28-Feb-2026 =EDATE(DATE(2024,1,31), 1) → 29-Feb-2024 (leap year) =EDATE(DATE(2026,3,31), -1) → 28-Feb-2026 =EDATE(DATE(2026,1,15), 3) → 15-Apr-2026 (same day preserved)

By contrast, simply adding 30 or 31 days to a date can produce wrong results. For instance, 31 January plus 31 days lands on 3 March, not 28 February. EDATE is the correct approach for any calculation that must respect calendar months.

Example 1: Contract Renewal and Expiry Dates

Contract management is one of the most common uses for EDATE. You can calculate an end date by adding the contract term in months to the start date. The formula updates automatically when you change the start date or the term length.

1
Calculate contract end dates and renewal reminders
#
A — Client
B — Start
C — Months
D — Expiry
E — Renewal alert
2
Acme Ltd
01-Apr-2026
12
01-Apr-2027
01-Jan-2027
3
Globex
15-Feb-2026
6
15-Aug-2026
15-Jun-2026
Contract end date — add C2 months to the start date: =EDATE(B2, C2) Renewal reminder — 3 months before the expiry date: =EDATE(D2, -3) Days until expiry (shows how urgent each renewal is): =NETWORKDAYS(TODAY(), D2) Status label — overdue or days remaining: =IF(D2 < TODAY(), "Expired", "Expires in " & (D2 - TODAY()) & " days")
EDATE(01-Apr-2026, 12) returns 01-Apr-2027. The day stays the same and the year advances automatically. Change C2 from 12 to 24 and the expiry updates to 01-Apr-2028 instantly.

Example 2: Subscription and Payment Schedules

Subscriptions, loan payments, and billing cycles all repeat at monthly intervals. EDATE generates each payment date from the first payment date. This approach is safer than adding 30 days repeatedly, because months vary in length.

2
Generate a 12-month payment schedule from a first payment date
A — Payment no.
B — Due date
C — Formula
1
15-Jan-2026
start date (in E1)
2
15-Feb-2026
=EDATE($E$1, A2-1)
3
15-Mar-2026
=EDATE($E$1, A3-1)
12
15-Dec-2026
=EDATE($E$1, A12-1)
First payment date stored in E1. Payment number in column A (1, 2, 3 ... 12). Formula in B2, copied down — A2-1 = 0 months offset for payment 1: =EDATE($E$1, A2-1) Quarterly payment dates from a base date in E1: =EDATE($E$1, (A2-1) * 3) Next billing date from today — always one month ahead: =EDATE(TODAY(), 1)
Lock the base date with $: Use an absolute reference like $E$1 for the first payment date. Without the dollar signs, copying the formula down shifts the reference and breaks the schedule.

Example 3: How to Subtract Months from a Date

Negative values in the months argument move the date backward. This is useful for calculating probation periods, look-back windows, and historical comparisons. You simply put a minus sign before the number.

3
Calculate start of probation, look-back windows, and past review dates
Start date
Formula
Result
Use case
01-Apr-2026
=EDATE(A2, -3)
01-Jan-2026
3-month look-back
01-Apr-2026
=EDATE(A3, -6)
01-Oct-2025
6-month review
01-Apr-2026
=EDATE(A4, -12)
01-Apr-2025
Same date last year
Subtract 3 months from a date in A2: =EDATE(A2, -3) Start of probation — 3 months before today: =EDATE(TODAY(), -3) Same date one year ago: =EDATE(TODAY(), -12) Months from a cell — B2 holds the number, sign already included: =EDATE(A2, B2) Enter -6 in B2 to subtract 6 months

Example 4: Add Years Using EDATE

EDATE works only with months. However, you can add years by multiplying the number of years by 12. This is much more reliable than adding 365 days, because it correctly handles leap years and keeps the day of the month consistent.

4
Add years to a date — warranty expiry, visa validity, and annual reviews
Start date
Years
EDATE formula
Result
15-Mar-2026
2
=EDATE(A2, B2*12)
15-Mar-2028
29-Feb-2024
1
=EDATE(A3, B3*12)
28-Feb-2025
01-Jul-2026
5
=EDATE(A4, B4*12)
01-Jul-2031
Add 2 years to the date in A2 — multiply years by 12: =EDATE(A2, 2 * 12) With years in cell B2: =EDATE(A2, B2 * 12) 5-year warranty from purchase date: =EDATE(A2, 60) 3-year visa expiry from issue date: =EDATE(A2, 36) Annual review — same date next year: =EDATE(A2, 12)
EDATE(29-Feb-2024, 12) returns 28-Feb-2025. It correctly handles the leap year edge case. Simply adding 365 days would give 28-Feb-2025 in this case, but EDATE is always reliable across all date scenarios.

Example 5: EDATE with TODAY — Dynamic Rolling Dates

Combine EDATE with TODAY() to create dates that update every day without any manual input. These dynamic formulas are ideal for rolling dashboards, overdue checks, and deadline alerts. Every time the workbook opens, the dates recalculate automatically.

5
Build rolling date windows that update automatically each day
Date 3 months from today — updates every day: =EDATE(TODAY(), 3) Date 6 months ago — rolling 6-month look-back window: =EDATE(TODAY(), -6) Is a contract date within the next 90 days (approx 3 months)? =AND(D2 >= TODAY(), D2 <= =EDATE(TODAY(), 3)) Returns TRUE if expiry date in D2 is within the next 3 months Flag renewals due within 3 months: =IF( AND(D2 >= TODAY(), D2 <= =EDATE(TODAY(), 3)), "Renew soon", "") Age in complete months — how many months since a start date: =DATEDIF(A2, TODAY(), "M")
Pair with conditional formatting: Use the rolling date formula in a conditional formatting rule to highlight rows automatically. Set the rule to fill cells red when the EDATE expiry check returns TRUE. The highlighting updates every day without any manual work.

Example 6: EDATE vs EOMONTH — When to Use Each

EDATE has a close relative called EOMONTH. Both functions move a date by a number of months. However, there is one key difference. EDATE preserves the original day of the month. EOMONTH always lands on the last day of the target month. Use EDATE for mid-month dates. Use EOMONTH for billing periods, month-end reports, and financial calculations.

6
Choose between EDATE and EOMONTH for the right date result
Start date
Months
EDATE result
EOMONTH result
15-Jan-2026
2
15-Mar-2026
31-Mar-2026
15-Jan-2026
1
15-Feb-2026
28-Feb-2026
01-Jan-2026
0
01-Jan-2026
31-Jan-2026
EDATE — preserves the same day of the month: =EDATE(A2, 2) 15-Jan → 15-Mar (day 15 is kept) EOMONTH — always returns the last day of the target month: =EOMONTH(A2, 2) 15-Jan → 31-Mar (last day of March) EOMONTH with 0 months — last day of the current month: =EOMONTH(A2, 0) 15-Jan → 31-Jan First day of next month using EOMONTH: =EOMONTH(A2, 0) + 1 15-Jan → 01-Feb
Quick rule: Use EDATE when the day of the month matters — payments on the 15th, renewals on the 1st, anniversaries. Use EOMONTH when you need period end-dates for reporting, financial statements, or billing cut-offs.

How to Fix Common EDATE Errors

Result shows a number instead of a date

EDATE returns a date serial number. Select the cell and press Ctrl+1. Then choose a Date format from the Number tab. Alternatively, wrap the formula in TEXT: =TEXT(EDATE(A2,3),"DD-MMM-YYYY").

#VALUE! error

Either start_date is not a valid date, or months is not a number. Check the start_date cell. Dates stored as text look like dates but fail in formulas. Use =ISNUMBER(A2) to test whether Excel recognises it as a real date. If it returns FALSE, re-enter the date properly or use DATEVALUE() to convert it.

Wrong result when adding to January 31

This is not an error — it is correct behaviour. EDATE adjusts to the last valid day of the target month. Adding one month to 31 January gives 28 or 29 February because February never has 31 days. If you need the result to stay on day 31, use a different approach based on your business rule.

Decimal months are truncated: EDATE ignores any decimal part of the months argument. EDATE(A2, 2.9) behaves the same as EDATE(A2, 2). Always pass a whole number for months to avoid confusion.

Frequently Asked Questions About EDATE

  • What does the EDATE function do in Excel?+
    EDATE adds or subtracts a set number of months from a date. It returns a new date on the same day of the month. For example, EDATE(15-Jan-2026, 3) returns 15-Apr-2026. Use a positive number to move forward in time. Use a negative number to move backward. The function handles month lengths, year rollovers, and leap years automatically.
  • How do I subtract months from a date with EDATE?+
    Use a negative number for the months argument. For example, =EDATE(A2, -3) subtracts three months from the date in A2. To subtract a variable number of months stored in a cell, enter the negative value in that cell and reference it: =EDATE(A2, B2) where B2 contains -3.
  • What is the difference between EDATE and EOMONTH?+
    EDATE preserves the original day of the month. EOMONTH always returns the last day of the target month. For example, both functions with a start date of 15 January and 2 months added return different results — EDATE gives 15 March and EOMONTH gives 31 March. Use EDATE for mid-month dates. Use EOMONTH for month-end reporting and billing cut-offs.
  • Can EDATE add years instead of months?+
    Yes. Multiply the number of years by 12 in the months argument. For example, =EDATE(A2, 2*12) adds exactly 2 years. This is more reliable than adding 730 days, because it correctly handles leap years and preserves the day of the month. With years stored in a cell B2, use =EDATE(A2, B2*12).
  • Why does EDATE return a number instead of a date?+
    Excel stores dates as serial numbers. EDATE returns that number, and it only appears as a date when the cell is formatted as a date. Press Ctrl+1, go to the Number tab, and choose Date. Alternatively, wrap the formula in TEXT() with a format code: =TEXT(EDATE(A2,3),"DD-MMM-YYYY") to display the result as a formatted string.
  • Which Excel versions support EDATE?+
    EDATE works in all Excel versions from Excel 2007 onwards. This includes Excel 2010, 2013, 2016, 2019, 2021, 2024, and Microsoft 365 on both Windows and Mac. It is also available in Excel for the web. You do not need any special Excel version or add-in to use it.