Search for a timesheet template and page one is a wall of download buttons. The math sits inside a file you can't read until you've downloaded it, and nobody says what it does with a shift that ends after midnight.
A common version is end time minus start time, times 24. On a 22:00–06:00 shift that returns −16 hours. Add a breaks column that subtracts every coffee break, and the sheet quietly underpays whoever fills it in.
So this free timesheet template isn't a file. It's the layout and every formula, what each piece does, and how it lines up with the US federal rules (the Fair Labor Standards Act) a timesheet has to satisfy. Outside the US, the overtime section says what changes.
Short answer: a weekly timesheet template needs one row per day and five columns that do the work: date, start, end, unpaid meal break in minutes, and hours. Put =IF(COUNT(C2:D2)<2,"",(ROUND(MOD(D2-C2,1)*1440,0)-E2)/60) in the hours column and it handles shifts past midnight, subtracts the break, and returns decimal hours. Total the week with SUM, split anything over 40 into overtime with MIN and MAX under the US (FLSA) rule, and fill each row on the day you work it.
The weekly timesheet template layout
Seven day rows, a totals block underneath, and nothing above row 1, so the formulas work exactly as written. These numbers come from the test week the formulas were checked on:
| Row | A: Day | B: Date | C: Start | D: End | E: Unpaid meal break (min) | F: Hours | G: Notes |
|---|---|---|---|---|---|---|---|
| 2 | Mon | 10/5 | 09:00 | 17:00 | 0 | 8.00 | |
| 3 | Tue | 10/6 | 08:30 | 17:00 | 30 | 8.00 | |
| 4 | Wed | 10/7 | 08:00 | 18:15 | 30 | 9.75 | |
| 5 | Thu | 10/8 | 09:00 | 17:50 | 45 | 8.08 | |
| 6 | Fri | 10/9 | 22:00 | 06:00 | 0 | 8.00 | night shift |
| 7 | Sat | 10/10 | |||||
| 8 | Sun | 10/11 | |||||
| 9 | Total | 41.83 | |||||
| 10 | Regular (40 max) | 40.00 | |||||
| 11 | Overtime | 1.83 | |||||
| 12 | Hourly rate | 20.00 | |||||
| 13 | Gross pay | 855.00 |
In I1:J2, off to the side, write your name and the day and hour your workweek starts. The second line isn't decoration: the federal record list for non-exempt employees includes the "time of day and day of week on which the employee's workweek begins" (29 CFR 516.2).
Format C2:D8 as time and F2:F13 as a number with two decimals. Type times as 22:00 or 10:00 PM.
The formulas, cell by cell: how to calculate hours worked in Excel and Google Sheets
One formula does the per-day work. Put it in F2 and fill down to F8:
=IF(COUNT(C2:D2)<2,"",(ROUND(MOD(D2-C2,1)*1440,0)-E2)/60)
From the inside out:
D2-C2is end minus start. A spreadsheet stores a time as a fraction of a day (Microsoft's TIME reference uses noon = 0.5), so 22:00 to 06:00 comes out at about −0.667.MOD(…,1)fixes midnight. Excel's MOD returns a result with the same sign as the divisor (Microsoft, MOD function), so −0.667 wraps to 0.333 of a day: 8 hours. Same-day shifts pass through untouched.*1440insideROUND(…,0)converts to whole minutes, the same ×1440 Microsoft uses for minutes between two times. This ROUND isn't a pay policy, since your inputs are whole minutes anyway. It clears the floating-point residue that Google's MOD documentation warns about on non-integers, and ROUND is the fix Google suggests there.-E2takes off the unpaid meal break./60gives decimal hours: 7 hours 45 minutes is 7.75, not 7.45.IF(COUNT(C2:D2)<2,"", …)keeps the cell empty until both times are in. COUNT counts only numeric values, and times are numbers.
Then the weekly block:
F9 =SUM(F2:F8) total hours
F10 =MIN(F9,40) regular hours
F11 =MAX(F9-40,0) overtime hours
F13 =F10*F12+F11*F12*1.5 gross pay; hourly rate goes in F12
Every function here exists in Excel and Google Sheets with the same arguments, so the same text pastes into either; that's the whole Google Sheets timesheet template.
The test week was run through an Excel formula engine (the Python formulas library) and checked against plain minute arithmetic. Every row matched: 8.00, 8.00, 9.75, 8.08 and 8.00, a 41.83-hour total, 1.83 hours of overtime, $855.00 at $20 an hour. The end-minus-start formula from Clockify's spreadsheet guide, =(F3-C3)*24, returned −16 for the Friday night shift, which is exactly how a homemade Excel time tracking sheet goes wrong at midnight.
Why decimals instead of h:mm? Pay is hours times a rate, and h:mm totals have a trap: Excel shows 12:45 plus 15:30 as 4:15 unless the total is formatted [h]:mm (Microsoft). Decimals never wrap at 24.
Which breaks to subtract under US rules
Only real meal breaks. Under the Fair Labor Standards Act, short rest breaks are paid time; column E is for meals where you were fully off duty.
- Short breaks count as work. Rest periods from 5 minutes to about 20 "must be counted as hours worked" (29 CFR 785.18).
- Meal periods don't, if they're real. A bona fide meal period is ordinarily 30 minutes or more, with the employee completely relieved from duty. The regulation's own example: an office worker required to eat at their desk is working while eating (29 CFR 785.19).
- Federal law doesn't require lunch or coffee breaks (DOL, Breaks and Meal Periods). The exception: the FLSA does require reasonable break time for nursing employees to pump breast milk, for one year after the child's birth, and that time is unpaid only if the employee is completely relieved from duty (DOL Fact Sheet #73). If your state requires other breaks, its rules sit on top.
So the 15-minute coffee break stays in the hours, and so does a lunch spent at your desk answering the phone.
FLSA overtime rules: 40 hours, one fixed workweek at a time
Under the FLSA, overtime is every hour past 40 in a workweek, paid at no less than one and a half times the regular rate (29 CFR 778.101, 778.107). The template is weekly because the rule is.
The workweek is fixed. It's a recurring block of 168 hours that can start on any day and at any hour, and once set it stays put (29 CFR 778.105).
Weeks don't average. Work 30 hours one week and 50 the next, and the second week carries 10 overtime hours even though the average is 40 (29 CFR 778.104). A biweekly sheet that compares 80 hours against 80 gets this wrong.
The regular rate isn't always your base wage. It includes all pay for employment except specific exclusions, discretionary bonuses among them (DOL Fact Sheet #23, revised October 2019). With non-discretionary bonuses or commissions, F13 comes out low. Treat it as a sanity check, not a paycheck.
Outside the federal frame, row 11 can be wrong in both directions:
- California adds daily overtime: time and a half past 8 hours in a workday, double time past 12, plus seventh-day rules (Cal. Labor Code §510). The weekly cell undercounts there.
- The UK limits hours to 48 a week on average, normally over 17 weeks, unless you opt out (GOV.UK), and employers don't have to pay for overtime at all as long as average pay stays at or above the National Minimum Wage (GOV.UK). Unless your contract sets an overtime rate, change F13 to
=F9*F12. - Everywhere else, check local rules before trusting row 11. Freelancers billing clients can skip overtime entirely:
=F9*F12is the line item.
Rounding: what 29 CFR 785.48 allows
Don't round in the sheet; the formula already works to the minute. If your employer rounds punches, the federal rule accepts it only when it doesn't shortchange people over time.
29 CFR 785.48 names the usual increments, the nearest 5 minutes, tenth of an hour or quarter hour, and accepts them only if they won't "result, over a period of time, in failure to compensate the employees properly."
"Nearest quarter hour" sounds neutral. Take someone who badges in at 8:53 and out at 17:07 every day with a 30-minute lunch. They worked 7 hours 44 minutes; rounded to 9:00–17:00, they're paid for 7 hours 30. That's 14 minutes a day, 70 a week, about 58 hours over a 50-week year: $1,167 at $20 an hour.
A colleague who punches 8:52 and 17:08 gains 14 minutes a day under the same rule. The rule is symmetric; the outcome depends on habits, and 785.48 judges the outcome.
To test your own punches, put this in H2:H8 and compare SUM(H2:H8) with F9 over a few months:
=IF(COUNT(C2:D2)<2,"",(ROUND(MOD(ROUND(D2*96,0)/96-ROUND(C2*96,0)/96,1)*1440,0)-E2)/60)
96 is the number of quarter hours in a day; use 240 for tenths and 288 for 5 minutes. On the 8:53/17:07 day it returns 7.50 against 7.73 unrounded, matching the hand calculation.
How to print it as a printable timesheet
Print A1:G13 only, or A1:J13 if you want your name and workweek start on the page. Excel prints the whole active sheet unless you tell it otherwise (Microsoft), so set a print area or print the selection, then scale it to one page. These menu paths come from Microsoft's and Google's help pages (checked October 2026), not from a test print:
- Excel for Mac: select the range, then File ▸ Print Area ▸ Set Print Area, or pick Selection in the Print box (Microsoft). Then Page Layout tab ▸ Page Setup ▸ under Scaling, Fit to 1 page wide by 1 tall, and File ▸ Print (Microsoft).
- Excel for Windows: select the range, then Page Layout ▸ Print Area ▸ Set Print Area (Microsoft). Then Page Layout ▸ Page Setup launcher ▸ Page tab ▸ Fit to 1 page wide by 1 tall (Microsoft).
- Google Sheets: File ▸ Print ▸ Selected cells, choose an orientation and paper size, then Next. In Safari or Firefox, Sheets downloads a PDF and you print from your PDF viewer (Google).
For a blank printable timesheet, clear C2:E8 first. F2:F8 then print blank thanks to the COUNT guard, but the totals in F9–F11 and F13 still show 0.00, so clear those on the copy you print. Filling it by hand, divide minutes by 60: 15 minutes is 0.25, 20 is 0.33, 30 is 0.5, 40 is 0.67, 45 is 0.75, 50 is 0.83.
Is a spreadsheet timesheet enough for the law?
Federally, yes. Employers may use any timekeeping method, including workers writing down their own times (DOL Fact Sheet #21). For a non-exempt employee the record must show hours worked each workday and each workweek, when the workweek begins, and the regular rate in any overtime week (29 CFR 516.2). A signature isn't on that list. Time cards with daily start and stop times are kept at least 2 years (29 CFR 516.6), payroll records at least 3 (29 CFR 516.5).
The weak spot: filling it in on Friday from memory
The template is the easy half. Any time tracking spreadsheet has the same weak spot: a week rebuilt from memory on Friday afternoon is an estimate sitting in a column labeled "actual."
How bad is memory? The research is less clear-cut than you'd expect. Robinson and colleagues (2011) found people's estimates of their working week ran 5–10% above their time diaries, mostly among people reporting long weeks; those working under 30 hours guessed low. BLS economists Frazis and Stewart (2004) found survey estimates "very close" to diary hours for the weeks the survey covers.
Neither study tested timesheets, but both benchmark against time diaries (in the ATUS, a telephone recall of the previous day). As Robinson's team puts it, "Recalling details about time spent in an activity involves complicated calculations."
So fill each row the day you work it, or from something written down at the time: a punch clock, your calendar, a time tracker.
That last one is where I have a stake. I build Timex, an automatic Mac time tracker that records the frontmost app, its window title and the active tab's URL into one SQLite file on your disk, with no account and no cloud. It gets into a timesheet two ways.
The Daily summary CSV in the Today header gives hours per day, category, app and site for the range on screen; sum a client's rows per day and type the total into column F over the formula.
Or export the database (Settings saves it as a ZIP) and drop it on the free timesheet PDF tool: pick Last 7d or a custom range, filter by app name or window title, set an hourly rate, and you get a printable PDF with total hours, a by-day table and a session log capped at 500 rows. It runs in your browser and needs a Timex file; the demo button only shows what the output looks like.
For client billing, the CSV workflow to invoice hours worked and the guide to track billable hours on a Mac go further.
What Timex can't do: it records Mac time, not your shift. After 120 seconds without keyboard or mouse input it stops counting, unless the frontmost app is playing audio or the mic is live, so calls keep counting. It can't see a phone call away from the Mac, a meeting room or paper; after 5 minutes away, Today offers to turn the gap into a manual entry. It's Mac only (macOS 15 or later on Apple Silicon), with no team dashboards. If your employer runs a time clock, that clock is your record.
The honest limits of this template
One shift per row. Split shifts need a second row for the same day; insert it inside the block so SUM(F2:F8) grows with it.
Shifts under 24 hours only. MOD can't tell a 24-hour shift from a zero-hour one; longer shifts need full date-and-time values in C and D.
It's not payroll. The pay cell applies the federal 40-hour rule at 1.5 times the rate you type. Taxes, regular-rate adjustments and state rules belong to payroll software or an accountant.
Verified in an Excel formula engine, not live in Google Sheets. Sheets uses the same functions, but check your first week against a calculator. It takes two minutes.
Fill it from a record
A timesheet template is a box for numbers, and the numbers are only as good as the moment you write them down. If your work happens at a Mac, the 100-hour trial needs no card and covers about two and a half 40-hour weeks: fill two weekly timesheets from the record and compare them with what you'd have written on Friday. Download Timex.
— DK