EDATE Function in Google Sheets
Returns a date that is a specified number of months before or after a start date. The cleanest way to compute "next month", "3 months ago", or any month-shifted date.
Syntax
EDATE(start_date, months)Returns: A date shifted by months from start_date.
Excel equivalent: EDATE (identical)
Parameters
| Name | Required | Description |
|---|---|---|
| start_date | Required | The reference date. |
| months | Required | Number of months to shift. Positive = future, negative = past. |
Examples
Next month from today
=EDATE(TODAY(), 1)Returns today's date plus one month. If today is Jan 15, returns Feb 15.
Quarter-end from contract date
=EDATE(A2, 3)Three months after the contract date — typical for billing cycles.
Subscription expiration
=EDATE(A2, 12)One year after start. EDATE handles year rollovers and leap-year edge cases automatically.
When to use an alternative
- EOMONTH — You want the END of the target month (e.g., last day of next month).
- DATE(YEAR()+1, MONTH(), DAY()) — You only want to add years and want the explicit construction.
- Simple date arithmetic (A2 + 30) — You want exactly 30 days, not one calendar month.
Common errors and how to fix them
Day shifts unexpectedly
Cause: Starting day doesn't exist in target month (Jan 31 + 1 month).
Fix: EDATE moves to the last day of the target month in this case (Jan 31 + 1 = Feb 28/29). If you want a fixed day-of-month, use DATE(YEAR(EDATE(...)), MONTH(EDATE(...)), 15).
Related functions
Frequently Asked Questions
What's the difference between EDATE and EOMONTH?
EDATE shifts by months but keeps the same day-of-month. EOMONTH shifts by months and returns the LAST day of the resulting month. EOMONTH(today, 0) = end of current month, EOMONTH(today, 1) = end of next month.
How does EDATE handle leap years?
Correctly — Feb 29 + 12 months = Feb 28 in non-leap years. The function moves to the closest existing date when the exact day doesn't exist in the target month.