Work Hours Calculator (Timesheet)
Weekly or biweekly timesheet: clock in, clock out, break minutes → hours worked and pay.
Hours are computed in your browser — no timesheet is uploadedAdd up work hours from clock in and out times, with breaks
24-hour format. If end is before start, an overnight shift is assumed.
| Day | Start | End | Break (min) | Hours |
|---|---|---|---|---|
| Week 1 | ||||
| Monday | — | |||
| Tuesday | — | |||
| Wednesday | — | |||
| Thursday | — | |||
| Friday | — | |||
| Saturday | — | |||
| Sunday | — | |||
| Week 2 | ||||
| Monday | — | |||
| Tuesday | — | |||
| Wednesday | — | |||
| Thursday | — | |||
| Friday | — | |||
| Saturday | — | |||
| Sunday | — | |||
About this work hours calculator
Enter a start time, an end time and any break minutes for each day of the week (or two weeks, if you switch the period selector to biweekly), and the tool adds up your hours worked. Give it an hourly rate and it also computes total pay. Blank rows contribute nothing, so a Monday-through-Friday week and a shift worker with three variable days both work in the same grid.
Overnight shifts are handled by convention: if the end time is earlier than the start time, the tool assumes the shift crossed midnight and rolls into the next day. A 22:00 to 06:00 shift with no break counts as eight hours, not negative sixteen. Break minutes are subtracted from the raw duration — so a 09:00 to 17:00 shift with a 60-minute break is seven hours, not eight — and every input is optional: leave the break field blank on a day you did not take one.
Hours are shown as decimal (7.50), not HH:MM, because that is the format payroll systems and spreadsheets actually store. A cell containing 7.50 multiplies against an hourly rate cleanly; a cell containing "7:30" is interpreted as a time-of-day and multiplying by a number silently gives the wrong answer, which is one of the most common Excel timesheet bugs. If you need HH:MM, format the payroll destination separately, but keep the source numbers as decimal hours.
Everything runs in your browser: no timesheet is uploaded, no account exists, and there is no daily cap on how many times you use it. That matters if the timesheet is for a client project, or the shift pattern is one you would rather not park on somebody else's server. If you need to compare your gross pay against take-home, the salary converter turns any figure into annual, monthly, weekly and hourly equivalents, and the Puerto Rico paycheck calculator does the full deduction breakdown for jobs based there.
One thing this deliberately does not compute is overtime, and it is worth naming why. Overtime rules differ sharply — the United States uses over 40 hours in a workweek at 1.5×, Mexico uses over 48 hours a week (nine hours daily average) at 2× for the first nine hours of overtime and 3× thereafter, Chile uses over 45 hours, Argentina uses over 48. Baking one country's rule into the tool would be wrong for every other country. The total hours here is the honest baseline; apply your jurisdiction's overtime split on top of that.
Calculating work hours in Excel or Google Sheets
Timesheets in a spreadsheet are simple math — subtract start from end, subtract the break — but there is one detail that trips almost everyone: how to keep hours as decimal numbers so they multiply cleanly against a rate.
A2 = start time, B2 = end time (both stored as time cells: 09:00, 17:30, etc.)
C2 = break in minutes (a plain number, e.g. 30)
D2 = HOURS worked, as decimal
Standard shift (end after start):
=(B2-A2)*24 - C2/60
Overnight shift (end before start, crossed midnight):
=(B2-A2+1)*24 - C2/60
Either shift, in one formula (works both ways):
=(MOD(B2-A2,1))*24 - C2/60Total hours across a week (D2:D8):
=SUM(D2:D8)
Total pay (E1 = hourly rate, D2:D8 = daily hours):
=SUM(D2:D8) * E1
Round to two decimals for display:
=ROUND((MOD(B2-A2,1))*24 - C2/60, 2)The most common Excel timesheet bug: keeping the hours column formatted as Time. A cell showing "7:30" is not the number 7.5 — it is the time-of-day 7:30 AM (Excel stores it as 0.3125, a fraction of a day). Multiplying that by an hourly rate gives dollars-per-day, not dollars for 7.5 hours. Force the format to Number with two decimals and the multiplication is honest again.
Work hours in SQL (from a shifts table)
If your clock-in / clock-out data lives in a database as timestamps, PostgreSQL and other engines with an interval type give you decimal hours directly. Break minutes as an integer column subtract cleanly.
-- PostgreSQL. shifts(employee_id, day, clock_in, clock_out, break_min)
SELECT employee_id,
day,
ROUND(EXTRACT(EPOCH FROM (clock_out - clock_in)) / 3600.0 - break_min / 60.0, 2)
AS hours_worked
FROM shifts
WHERE clock_out > clock_in;
-- Total per employee per week
SELECT employee_id,
DATE_TRUNC('week', day) AS week_start,
ROUND(SUM(EXTRACT(EPOCH FROM (clock_out - clock_in)) / 3600.0 - break_min / 60.0), 2)
AS total_hours
FROM shifts
WHERE clock_out > clock_in
GROUP BY employee_id, DATE_TRUNC('week', day)
ORDER BY employee_id, week_start;For overnight shifts where clock_in and clock_out sit in different date columns, add a day to clock_out before subtracting; if the schema uses a single event log with in/out rows instead of paired columns, LEAD() over a partition by employee is the tool for pairing them.
Overtime — the country-by-country baseline
This tool reports raw hours. Overtime is layered on top per country. These are the headline thresholds and rates; specific industries and collective bargaining agreements often override them.
| Country | Weekly threshold | Overtime rate |
|---|---|---|
| United States (FLSA) | Over 40 hours in a workweek | 1.5× regular rate |
| Mexico (LFT) | Over 48 hours per week (avg 8 per day) | 2× for the first 9 OT hours per week; 3× thereafter |
| Spain | Over 40 hours per week (average, over ref. period) | Compensated at ≥ ordinary rate or as equivalent rest |
| Chile | Over 45 hours per week | 1.5× regular rate; max 2 OT hours per day |
| Argentina | Over 48 hours per week | 1.5× on weekdays; 2× on Saturdays after 13:00, Sundays, and holidays |
| Colombia | Over 46 hours per week (transitioning to 42 by 2026) | 1.25× daytime OT; 1.75× nighttime OT |
| Peru | Over 48 hours per week | 1.25× first two OT hours; 1.35× each hour after |
Apply your local rule after the fact: split the total this tool reports into standard hours and overtime, then multiply each by its respective rate. A country-specific overtime calculator is on the roadmap.
FAQ
How do I handle an overnight shift?
Just enter it. If the end time is earlier than the start time — say 22:00 to 06:00 — the tool assumes the shift crossed midnight and counts eight hours, not negative sixteen. That is the standard convention every timesheet needs to handle, and it works with or without breaks. The one edge case: a 24-hour shift is not supported (a start and end that are equal shows zero); split it into two rows if you ever actually work one.
Does it compute overtime?
No, deliberately. Overtime rules differ sharply by country — the US uses over 40 hours in a workweek at 1.5×, Mexico uses over 48 hours weekly with a 2× / 3× tiered rate, Chile uses over 45, Argentina uses over 48 — and choosing one would be wrong for the others. The total hours you see is the honest baseline; apply your local overtime rule on top of it. If enough people ask for a country-specific overtime calculator, that will be a separate tool.
Why show hours as 7.50 and not 7:30?
Because 7.50 is what payroll systems and spreadsheets can multiply against an hourly rate. A cell containing "7:30" is interpreted as a time-of-day (7:30 AM), and multiplying that by an hourly rate silently gives the wrong answer — one of the most common Excel timesheet bugs. Decimal hours never have that ambiguity. If your destination needs HH:MM, format it there; keep the source as decimal.
Is my timesheet data private?
Yes. Every calculation runs in your browser using plain JavaScript — the times, break minutes and hourly rate never leave the page. There is no account, no upload, no server round-trip, and no cap on how often you use it. Safe for client-project timesheets or any schedule you would rather not park on someone else's server.