EDATE Function (Gnumeric)
Learn the EDATE function in Gnumeric: Returns the serial number of the date that is a specified number of months before or after the start date.
Verification status: Official documentation referenced; example outcomes independently reasoned or arithmetically checked where stated. Not executed in Gnumeric. How formula examples are checked
Quick answer
EDATE shifts a calendar date forward or backward by a specified number of months. It normally keeps the day of the month; when the destination month is shorter, it uses the last valid day of that month. For example, moving January 31, 2024 forward one month gives the expected date February 29, 2024, not March 2. It is useful for subscription renewals, due dates, and anniversary schedules. It returns a spreadsheet date serial, so apply a date display format if the result appears as a number.
Exact syntax and arguments
=EDATE(date,months)
date — Required. Spreadsheet date serial or a cell reference holding a valid date. Use DATE(year,month,day) to construct an unambiguous example date.
months — Required. Signed number of calendar months to shift: positive moves forward, zero retains the starting month, negative moves backward. Use an integer for predictable results.
The parameter order follows the Gnumeric Date/Time function help in the official GNOME source archive (2009-07-28). There is no documented omitted-argument default in the cited help. A historical Gnumeric help note says a fractional months value is truncated; because no 1.12.62 native test was performed, prefer integer inputs and verify fractional values in your installed version rather than rely on an undocumented rounding rule. The Gnumeric function catalogue lists EDATE as Complete with Basic project tests; those labels are not a substitute for running these examples. [Sources: S1, S2]
Version, platform and locale: Gnumeric 1.12.62 is the latest stable release identified by the project on this research date (2026-10-11). The release inventory contains EDATE; its introduction version is not established here. The examples use comma separators, matching the cited English-language Gnumeric source notation. An installation using another locale may require a different list separator or different date presentation; consult the local function dialog. Avoid date strings such as "01/02/2024" when the intended month/day order is ambiguous. [Sources: S1, S2, S3, S4]
Reproduce the result in a new worksheet
First set up this synthetic dataset. Type the formulas in column A exactly as shown. These create valid dates without depending on regional text-date parsing. Enter the month offsets in column B.
On a narrow screen, scroll this table sideways to see every column.
| Row | A: start date formula | B: months | C: formula | Expected displayed date |
|---|---|---|---|---|
| 2 | =DATE(2024,1,31) |
1 |
=EDATE(A2,B2) |
2024-02-29 |
| 3 | =DATE(2025,1,31) |
1 |
=EDATE(A3,B3) |
2025-02-28 |
| 4 | =DATE(2024,3,15) |
-1 |
=EDATE(A4,B4) |
2024-02-15 |
| 5 | =DATE(2024,12,30) |
2 |
=EDATE(A5,B5) |
2025-02-28 |
| 6 | =DATE(2024,1,31) |
0 |
=EDATE(A6,B6) |
2024-01-31 |
Expected, not natively observed: all dates in this table were independently calculated using Python calendar arithmetic. They have not been produced by executing Gnumeric. Apply a Date format to column C. In row 2, the requested destination is February 2024; it has 29 days, so the original day 31 cannot be retained. Row 3 shows a non-leap year; row 4 moves back one month while retaining day 15. [Sources: S1, S2]
Direct formula check
=EDATE(DATE(2001,12,30),2)
Expected displayed date: 2002-02-28. This follows an example explicitly present in Gnumeric’s historical source documentation. If the cell shows a serial number, format it as a date rather than changing the computation. [Source: S2]
More advanced uses
A recurring renewal date without a drifting anchor
If A2 contains the original agreement date and B2 stores the number of whole months elapsed, use:
=EDATE($A$2,B2)
This shifts from the original anchor, rather than from last month’s already-clipped result. For example, EDATE(DATE(2024,1,31),2) has an independently calculated result of 2024-03-31, but EDATE(EDATE(DATE(2024,1,31),1),1) has an independently calculated result of 2024-03-29. Chaining month shifts can cause day-of-month drift in a leap year. Choose whichever rule matches your real policy; do not quietly substitute one for the other.
Separate end-of-month policy from anniversary policy
An event held on the 15th of each month generally calls for EDATE; financial statements requiring the last day of each month call for EOMONTH. For a starting date of DATE(2024,1,15), EDATE with a one-month shift is expected to produce 2024-02-15, while EOMONTH with the same shift is expected to produce 2024-02-29. These are different business rules, not interchangeable function names. [Source: S2]
Produce a schedule of month offsets
Put a valid anchor in $A$2; put 0, 1, 2, 3 in cells B2:B5, and use =EDATE($A$2,B2) in C2, then fill down. Because B2 changes by row, this avoids repeatedly applying the function to the prior result. Use whole-month offsets and check leap-year cases for invoices with contractual deadlines.
Errors, limitations and troubleshooting
- Unexpected number instead of a date: the formula returns a numeric date serial. Choose a date format; the underlying calculation does not require converting the serial to text.
- Unexpected day 28, 29 or 30: the destination month may be shorter than the original date’s day. Check the calendar year, leap-year status, and whether offsets are anchored or chained.
- A date appears swapped by month/day: enter test dates via
DATE(2024,3,15)instead of ambiguous slash-separated text; locale affects entry and display. - Missing or invalid arguments: the historical Gnumeric synopsis requires both arguments. Blank cells, text instead of a date serial, invalid date serials and offsets outside supported date range need to be tested in the installed version before reporting an exact error token; do not assume every such case produces the same error.
- Fractional month offsets: a 2009 Gnumeric documentation comment describes truncation, but no Gnumeric 1.12.62 execution was done. Use integers to avoid relying on version-specific coercion.
- Off-by-one serial comparisons: workbooks can differ in date system and base-date conventions. Compare displayed calendar dates, verify imported date serials and workbook settings, and test older historical dates separately.
Compatibility and careful scope
Gnumeric’s historical official function help explicitly describes EDATE as Excel-compatible, and Microsoft Excel documents a same-named date-offset function. This does not certify identical behavior for invalid inputs, fractional months, all spreadsheet date systems, all locales or old releases. LibreOffice Calc has a same-purpose function but may show semicolons in its formula examples. The calendar examples here are independent expectations, not an Excel-versus-Gnumeric benchmark. [Sources: S2, S6]
Related Gnumeric guides
Official documentation and evidence
- S1 (catalogue presence/test classification): Gnumeric’s function list, accessed 2026-10-11.
edateis listed in Date/Time as Complete / Basic. - S2 (argument names, documented behavior, historical example): GNOME’s archived Gnumeric source documentation commit (2009-07-28), accessed 2026-10-11;
plugins/fn-date/functions.c,help_edate. This is historical source evidence, not a 1.12.62 native run. - S3 (release): Gnumeric home page, accessed 2026-10-11, stable release 1.12.62.
- S4 (1.12.62 release inventory provenance): GNOME release source archive,; versioned source evidence, not a native application run.
- S6 (limited Excel naming comparison): Microsoft EDATE help, accessed 2026-10-11. This is not Gnumeric execution evidence.
How this guide was checked
The syntax and behaviour are based on the Gnumeric references cited above. The sample calculations were independently checked; they are expected results, not outputs observed in Gnumeric. Test locale-sensitive text conversion and imported files in your own installation. View the example-check record.