Most Excel trainers tell you 'just use DAYS() — it’s simple and reliable.' They’re dangerously oversimplifying. DAYS(A2,B2) returns 365 for Jan 1, 2023 → Jan 1, 2024 — but that’s wrong if you need business days, leap-year accuracy, or fiscal-year alignment. And DATEDIF? Microsoft hides it because it’s buggy in edge cases — yet it’s the only one that handles 'years, months, days' breakdowns. You’ll waste hours debugging if you pick the wrong function first.
Quick Answer
If you want calendar days between two dates: use =B2-A2 (yes, plain subtraction). For workdays only: =NETWORKDAYS(A2,B2). For exact year/month/day differences: =DATEDIF(A2,B2,"yd") — but avoid "md" unless you’ve tested it with Feb 29. Never use DAYS() for financial calculations — it ignores time zones, leap seconds, and date system mismatches (1900 vs. 1904).
All the Methods
| Method | Steps | Best For | Limitations |
|---|---|---|---|
| Subtraction (B2-A2) | Enter =B2-A2 in any cell | Calendar days, quick estimates, same-date-time precision | Fails with text-formatted dates; gives negative if start > end |
| DAYS(end,start) | Type =DAYS(B2,A2); arguments reversed vs subtraction | Consistent syntax across newer Excel versions | Ignores time values; no holiday support; breaks on pre-1900 dates |
| NETWORKDAYS(A2,B2,holidays) | List holidays in E2:E5, then =NETWORKDAYS(A2,B2,E2:E5) | HR, project timelines, payroll deadlines | Excludes weekends by default — can’t switch to Mon-Sat weeks without NETWORKDAYS.INTL |
| DATEDIF(A2,B2,"d") | =DATEDIF(A2,B2,"d") — note: undocumented, no IntelliSense | Legacy reports, compatibility with old .xls files | Crashes Excel if A2 > B2; "md" fails on Feb 28–Mar 1 in leap years |
| YEARFRAC(A2,B2,1) | Multiply result by 365: =YEARFRAC(A2,B2,1)*365 | Financial accruals, interest calculations | Rounds to nearest day; uses actual/actual day count basis — not always intuitive |
Method 1 Deep Dive
Let’s say you’re tracking contract durations for Acme Corp vendors. In A1:A6, you have start dates: 2024-01-15, 2024-02-29, 2023-12-01, 2024-03-10, 2024-07-04. B1:B6 holds end dates: 2024-04-20, 2024-06-15, 2024-01-31, 2024-05-22, 2024-12-25.
Type =B1-A1 in C1. Drag down to C6. You’ll get: 96, 107, 61, 73, 174. That’s clean, fast, and matches Excel’s internal serial number math — where 1 = 1 day. No function call means no formula audit risk. (Trust me, I learned this the hard way debugging a $2.3M billing discrepancy caused by DAYS() misreading a CSV import.)
But here’s the surprise: if A1 contains 15-Jan-2024 14:30 and B1 has 20-Apr-2024 09:15, =B1-A1 returns 95.76041667 — meaning 95 days + ~18.25 hours. Format C1 as Number with 0 decimals to round, or use =INT(B1-A1) to truncate time. Shortcut: Alt+H, F, M opens Format Cells → Number tab.
Method 2 Deep Dive
Now imagine you’re Sarah Chen in Procurement, calculating vendor SLA compliance. Your team needs *business days only*, excluding public holidays like US Thanksgiving (2024-11-28) and Independence Day (2024-07-04). List those in E1:E3.
In D1, enter: =NETWORKDAYS(A1,B1,$E$1:$E$3). Drag down. Results: 68, 75, 44, 52, 122. Notice how D5 drops from 174 calendar days to 122 workdays — that’s over 3 weeks of non-working time.
Counterintuitive tip: NETWORKDAYS includes both start and end dates — even if they fall on weekends. So =NETWORKDAYS(DATE(2024,1,1),DATE(2024,1,1)) returns 1, not 0. If your SLA says 'within 5 business days', and day 1 is Saturday, it still counts. To exclude start date, subtract 1: =NETWORKDAYS(A1,B1,holidays)-1.
Need Monday–Friday? Fine. But what if your client works Sunday–Thursday? Use =NETWORKDAYS.INTL(A1,B1,11,$E$1:$E$3) — the “11” tells Excel weekend = Saturday + Sunday. Change to “7” for Friday+Saturday off. Full list: Alt+M, V, V opens Formula Auditing → Evaluate Formula if you ever doubt the logic.
Cheat Sheet
| Task | Formula | Cell Example | Shortcut |
|---|---|---|---|
| Calendar days (quick) | =B2-A2 | C2 | None — just type |
| Workdays, custom weekends | =NETWORKDAYS.INTL(A2,B2,11,E2:E5) | D2 | Alt+M, V, V |
| Days ignoring years (e.g., birthday gaps) | =DATEDIF(A2,B2,"yd") | E2 | Type manually — no IntelliSense |
| Days as decimal years × 365 | =YEARFRAC(A2,B2,1)*365 | F2 | Ctrl+1 → Number → Decimal places |
| Fix text dates before counting | =DATEVALUE(A2) | G2 | Alt+H, F, M |