Dates are day-numbers in costume — that lesson unlocked the calendar. Times complete the story with one small extension that explains every timesheet mystery you’ll ever meet: a time is a fraction of a day. Noon is 0.5. Six in the morning is 0.25. 17:30 is 0.729…, and a date-with-time like 16/07/2026 09:00 is just 46,219.375 — whole days plus the fraction.

Believe that, and time arithmetic is ordinary subtraction:

=C2-B2        finish − start  →  0.354…  →  formatted: 8:30

Everything that goes wrong with timesheets goes wrong in one of three places — and each has a one-line fix.

Trap one: the sum that wraps at 24

Sum a week of 8:30 shifts and Excel reports… 18:30. The values are right (the true total is 42.5 hours ≈ 1.77 days); the default time costume shows only the time-of-day part, wrapping past midnight like a clock face. The fix is a costume, not a formula — the square-bracket format:

[h]:mm    →  42:30

[h] means “total hours, don’t wrap”. The single most useful fact in timesheet Excel, and it’s one custom format from the pattern language.

Trap two: hours × rate

Pay time is where the fraction bites: 42:30 at £15/hour is =total * 15 → about £26.56, because the cell holds 1.77 days. Convert days to hours first:

=total_time * 24 * rate     → 42.5 × 15 = £637.50

Multiply by 24 whenever a time must become a decimal number of hours — for pay, for charts, for weighted averages of shift lengths. The reverse (÷24) turns decimal hours back into time values.

Mon–Fri · five 8:30 shifts · =SUM(...) h:mm wraps the clock 18:30 ✗ 42:30 ✓ format: [h]:mm value: 1.7708 days — × 24 × £15 = £637.50 same value in both cells; only the costume differs
The sum was never wrong — the clock-face costume wraps at midnight. Square brackets un-wrap it, and ×24 turns it into payable hours.

Trap three: the shift past midnight

22:00 to 06:00 subtracts to −0.667 — a negative time, displayed as #####, because plain times carry no date and Excel thinks you finished before you started. Two honest fixes: the classic wrap-around formula,

=MOD(finish - start, 1)

(MOD rolls the negative around a full day — 8:00, correctly); or, better for anything serious, store full date-times (16/07 22:00, 17/07 06:00) and plain subtraction just works — the same store-the-whole-truth instinct that runs the entire course. Night-shift-heavy rotas want the second; the odd late Friday survives on the first.

The assembly

Put the three fixes together and the working timesheet is almost disappointingly small: start and finish columns as real times (entered 9:00, not 9.00 — the colon is the contract; a . makes text), an unpaid-break column to subtract, a daily =MOD(finish-start,1)-break, a [h]:mm weekly total, and a ×24×rate pay line, ROUNDed at the money moment. Add NETWORKDAYS when the question becomes “working days between dates” rather than hours — dates and times are one system, and now you hold both halves.

A time is a fraction of a day. One fact, three traps, three one-line fixes — and the timesheet, humanity’s oldest spreadsheet, finally behaves.