Menu▾

Chapter 12 · advanced · 6 min

Dates II: business days, deadlines, and ages

The serial-number chapter covered the model and the arithmetic that follows from it. This chapter is the four functions built on top of that model that show up constantly in ops and finance scenarios: how many working days between two dates, what date is N working days from now, how many full years/months/days between two dates, and which day of the week a date falls on.

We'll work with four AirAsia-style bookings throughout: when each was booked, and when it departs. They range from an 18-day gap to a three-month one, plus one booked on a Friday for the following Monday.

The grid

Column A holds each booking date and column B its departure date, both as real dates. Columns C to E are where the formulas go.

NETWORKDAYS: counting only weekdays

Subtracting one date from another counts every calendar day, weekends included. NETWORKDAYS(start, end) counts only Monday to Friday between the two dates, inclusive of both ends:

=NETWORKDAYS(A5,B5)

Row 5 is the clearest case: booked on Friday 29 May, departing Monday 1 June. Three calendar days apart, but the Saturday and Sunday in the middle don't count, and both ends do.

Friday 29 May to Monday 1 June, counting both ends but skipping the weekend. How many weekdays is that?

C5

Scroll to see all 5 columns →

ABCDE
1BookedDepartsWeekdaysPay byFull months
22026-01-052026-02-16
32026-03-022026-03-20
42026-04-102026-07-09
52026-05-292026-06-01=NETWORKDAYS(A5,B5)
Editable, try changing it

WORKDAY: N working days from a date

WORKDAY runs the other direction: given a start date and a number of working days to add, it returns the resulting date, skipping weekends automatically. Say payment is due 10 working days after booking:

=TEXT(WORKDAY(A2,10),"yyyy-mm-dd")

Like EOMONTH, it returns a raw serial number, hence the TEXT wrap. A negative second argument counts backward — useful for "what's the latest day I could start this task to finish 10 working days before the deadline".

A2 is Monday 2026-01-05. Counting only weekdays, what date lands 10 working days later?

D2

Scroll to see all 5 columns →

ABCDE
1BookedDepartsWeekdaysPay byFull months
22026-01-052026-02-16=TEXT(WORKDAY(A2,10),"yyyy-mm-dd")
32026-03-022026-03-20
42026-04-102026-07-09
52026-05-292026-06-01
Editable, try changing it

DATEDIF: age in whole years, months, or days

DATEDIF(start, end, unit) returns a whole-unit difference — "y" for complete years, "m" for complete months, "d" for total days. It's the function behind every "how many years/months since X" calculation, and notably absent from Excel's own function-insert dialog despite being fully supported.

=DATEDIF(A2,B2,"m")

The word that matters is complete. Fill the formula down and look at row 4: 10 April to 9 July looks like three months, but the third one is a day short of finishing, so it doesn't count. Row 3's 18 days isn't a month at all.

Complete months between row 2's booking and departure

In E2, return the number of complete months between the booking date (A2) and the departure date (B2). Then fill down and check row 4.

E2

Scroll to see all 5 columns →

ABCDE
1BookedDepartsWeekdaysPay byFull months
22026-01-052026-02-16
32026-03-022026-03-20
42026-04-102026-07-09
52026-05-292026-06-01

WEEKDAY, and the trap of DATEDIF's argument order

WEEKDAY(A5) returns a number 1-7 for the day of the week (Sunday=1 by default), so row 5's Friday booking comes back as 6. It's simpler than the other three but easy to skip past — useful for flagging weekend bookings without a full NETWORKDAYS call.

The real trap is DATEDIF's argument order: it requires start_date before end_date and returns #NUM! if you pass them backward — unlike B2-A2, which happily returns a negative number when the dates are swapped. A #NUM! from DATEDIF almost always means the two dates were passed in the wrong order, not that the function is broken.

Sign in to track your progress.

Now practise it

Excel questions in the bank that drill this chapter's concept: