foldout

Add days to a date in Excel: days, weeks, months, working days

Adding days to a date is plain addition, because a date is a day count. That one fact also tells you where addition stops working: a month is not thirty days and a year is not 365, so months and years need EDATE. Here is every form we use, in versions that open the same in Excel 2016, Google Sheets, LibreOffice and Numbers.

Add days: just add

in A2 a date, in B2 the answer
=A2 + 30            thirty days after A2
=A2 - 7              seven days before
=TODAY() + 14        a fortnight from today
=A2 + B3             B3 holds the number of days

A date in a spreadsheet is a number — the count of days since the end of 1899. 1 Sep 2026 is 46266, the next day is 46267. So “thirty days later” is + 30, and nothing else is needed. There is no DATEADD function in a spreadsheet, and people look for one because other tools have it.

One thing to fix afterwards: if the result shows as a number like 46296, the cell is formatted as General. Format it as a date and the number becomes a date again — the value never changed, only the costume.

Add weeks: multiply by seven

weeks
=A2 + 7              one week later
=A2 + 7*2            two weeks later
=A2 + 7*$B$3         B3 weeks later, so you can change B3 and not the formula

Keep the 7* visible rather than writing +14. Six months from now, 7*2 still says “two weeks” and 14 says nothing.

Add months: EDATE, not + 30

months
=EDATE(A2, 3)        three months later
=EDATE(A2, -1)       one month earlier
=EDATE(A2, 12)       a year later
=EDATE(A2, 12*5)     five years later

A month is 28 to 31 days, so A2 + 30 is not “a month later”. Copy it down a column of monthly rows and it drifts off the calendar: start on the 31st of January and plain addition walks you to the 2nd of March, then the 1st of April, then nowhere near the month end.

EDATE keeps the day of the month and clamps when it has to. EDATE("31 Jan", 1) is 28 February, not 3 March — which is what a person means by “the same date next month”.

Add years

years, two ways
=EDATE(A2, 12*3)                          three years later
=DATE(YEAR(A2)+3, MONTH(A2), DAY(A2))      the same, spelled out

Both land on the same day of the month every time, and both handle leap years. A2 + 365 does not: it slides a day every fourth year, and the slide is invisible until somebody notices a renewal date is wrong.

Add working days, skipping weekends

working days
=WORKDAY(A2, 10)                    ten working days after A2
=WORKDAY(A2, 10, hols)               the same, skipping a named range of holidays
=WORKDAY(A2, -5)                     five working days earlier
=WORKDAY.INTL(A2, 10, 7)             weekend is Friday+Saturday instead of Sat+Sun

WORKDAY counts Monday to Friday and skips the rest. The holiday argument takes a range of dates — keep it on a Setup sheet as a named range you can edit for your own country, because no function knows your public holidays.

WORKDAY.INTL exists in Excel 2010+ and in Google Sheets, and its third argument picks which days count as the weekend. If the file has to open in older Excel or in Numbers, stay with plain WORKDAY.

Due dates: the form every invoice needs

due date from an invoice date and terms
=IF(A2="", "", A2 + $B$3)            B3 = terms in days (14, 30, 45, 60)
=IF(A2="", "", EDATE(A2, $B$3))       B3 = terms in months
=IF(A2="", "", WORKDAY(A2, $B$3))     B3 = terms in working days

The IF on the empty cell is not decoration. An empty cell behaves as 0 in arithmetic, "" + 30 is 30, and 30 formatted as a date is 30 January 1900 — which is how a blank row in an invoice tracker ends up looking three lifetimes overdue, in red, every time you open the file.

When the dates are text

Arithmetic on a date returns #VALUE!, or nothing happens at all, when the cell only looks like a date. The giveaway is alignment: a real date sits right in the cell, text sits left.

checking and repairing
=ISNUMBER(A2)                                      TRUE for a real date
=DATEVALUE(A2)                                      text in the sheet's own locale format
=DATE(RIGHT(A2,4), MID(A2,4,2), LEFT(A2,2))         rebuild from dd/mm/yyyy text

This is the usual state of a column pasted out of a bank export or a web page. Repair the column once, then add your days.

The traps worth knowing

Never build a date from text inside a formula. "1/9/2026" is January in one country and September in another; DATE(2026, 9, 1) has no locale and means the same everywhere.

NOW() carries the time, TODAY() does not. A2 + 7 <= NOW() is true for a date seven days ago from one second after midnight. Compare whole days with TODAY(), or with INT(NOW()).

Keep “as of” in a cell. Write =TODAY() once, in C3, and point formulas at $C$3. Then you can type a date into C3 to see next week’s state, the file recalculates the same in every app, and a test can pin the date instead of waiting for tomorrow.

The rest of the date arithmetic

Days between two dates, the first and last day of a month, totals by month, weekday names, quarters, week numbers and a status chain from a due date are all the same model applied differently — they are in Excel date formulas. Times are the other half of the same number: a time is a fraction of a day, and that is hours between two times.

Tell us what happened

Goes straight to a person. No account, no ticket number.

What is this about?

We keep the message and the page it came from. Nothing else — not your IP, not your browser. Privacy.