EDATE Function (OpenOffice Calc)
Shift dates by calendar months with EDATE in Apache OpenOffice Calc. See month-end clamping, anchored schedules and native date-serial examples.
Verification status: Eight ordinary reference formulas were recalculated in Apache OpenOffice 4.1.16 on Linux x86-64, Build 9816, through generated native ODF and GUI hard recalculation. Saved identities and results were checked. How formula examples are checked
Quick answer: =EDATE(DATE(2024;1;31);1) returned 2024-02-29 as a date serial in the tested Apache OpenOffice 4.1.16 build.
Availability and version history
- Introduced: First release not established; documented by OpenOffice.org 3.3.
- Supported in: Apache OpenOffice 4.1.16; this is a verified release, not a final supported version.
- Scope: Desktop Calc, English function names and semicolon-separated formulas.
- Checked: October 14, 2026. Eight ordinary reference formulas were recalculated from generated ODF in 4.1.16 on Linux x86-64, Build 9816. Source and independent calendar arithmetic were checked.
What EDATE returns
EDATE moves a date by a signed number of calendar months and retains the original day number when it exists in the target month. If that day does not exist, the result is clamped to the target month’s final day. It does not automatically preserve “last day of month” as a permanent scheduling rule. Release implementation.
Syntax and arguments
EDATE(StartDate;Months)
- StartDate: required date value or date cell.
- Months: required signed integer month offset. Positive moves forward, negative backward, zero stays in the same month.
- Both parameters enter the add-in as integers. The examples deliberately use whole date serials and whole offsets; fractional conversion is not native-tested here.
Eight reproducible examples
The native serials are also interpreted as Gregorian calendar dates under the workbook’s 1899-12-30 date epoch. Numerical values are shown to twelve decimal places where needed. Enter the DATE expressions directly rather than substituting locale-dependent text.
| Formula | Native 4.1.16 serial | Calendar date |
|---|---|---|
=EDATE(DATE(2024;1;31);1) |
45351 |
2024-02-29 |
=EDATE(DATE(2024;1;31);2) |
45382 |
2024-03-31 |
=EDATE(DATE(2024;2;29);1) |
45380 |
2024-03-29 |
=EDATE(DATE(2023;1;31);1) |
44985 |
2023-02-28 |
=EDATE(DATE(2024;3;31);-1) |
45351 |
2024-02-29 |
=EDATE(DATE(2024;6;15);0) |
45458 |
2024-06-15 |
=EDATE(DATE(2024;2;29);12) |
45716 |
2025-02-28 |
=EDATE(DATE(2024;11;30);3) |
45716 |
2025-02-28 |
Practical worksheet
Starting from January 31, 2024, an offset of 1 gives February 29, while an offset of 2 from the same original date gives March 31. Starting from February 29 with an offset of 1 gives March 29, rather than March 31.
For an anchored monthly schedule, keep the original date in A2 and the period index in B2:B4. Use =EDATE($A$2;B2). With A2=January 31 and indices 0,1,2, the schedule is January 31, February 29, March 31. Repeatedly applying one month to the preceding clamped result instead gives January 31, February 29, March 29.
Advanced interpretation and checks
Convert a year/month pair to a continuous month index, add Months, then convert it back to year and month. The returned day is the smaller of the original day and the target month’s length. This independent calendar method matches all eight native results.
Clamping means the operation is not generally invertible: January 31 → February 29 → January 29 when adding 1 and then −1. It also means EDATE(EDATE(A2;1);1) need not equal EDATE(A2;2). If the business rule is always month-end, use EOMONTH deliberately instead of assuming EDATE preserves that property.
Boundaries and troubleshooting
The output is a numeric date serial. Apply a date number format to see a calendar date; the table includes both the saved serial and its ISO-style calendar interpretation under the tested 1899-12-30 epoch. A displayed integer is not evidence of a wrong date.
The eight ordinary calls cover valid dates and modest whole-month offsets. Text dates, fractional Months, invalid serials and extreme year limits were not executed. Keep dates as typed values and do not approximate a calendar month by adding 30 days.
Related functions
Official evidence and checking scope
- Function-specific release implementation
- ScaDate::ScaDate helper
- ScaDate::addMonths helper
- ScaDate::getDate helper
The generated ODF produced the informational load warning “Not all attributes could be read.” The sheet was hard-recalculated and saved separately. All eight ordinary function identities and results were reconciled; a stale SUM cache changed from 999999 to 3 and an uncached SUM returned 7. This establishes the stated examples, not every workbook style or invalid input. Other explanatory identities are independent calculations. The authoring-tool XLSX was not executed in OpenOffice, and its preview values are not the native results reported here.