Shift and overtime calculator with payroll CSV
Enter each shift, including the ones that cross midnight, and get worked hours, overtime and pay per day and for the whole period. Export a CSV for payroll. Your shifts stay in your browser.
- Your shifts stay in your browser
- Works offline
| Date | Start | End | Break | Day type | Worked | OT | Pay |
|---|
How it works
- 1
Set your rates once
Hourly rate, the daily hours before overtime starts, and the multipliers for overtime, rest days and public holidays. They are saved in your browser, so the next pay period starts ready. The defaults — 8 hours, 1.5× overtime, 2× rest day, 3× public holiday — are a common starting point rather than any country’s law, so replace them with the figures in your own contract before the numbers mean anything.
- 2
Add shifts as you work them
Use 24-hour times. A shift from 22:00 to 06:00 is counted as eight hours, not negative sixteen. Unpaid break minutes come off before anything else is worked out, so a 30-minute break on a 9-hour shift leaves 8.5 paid hours and only half an hour of overtime rather than a full hour. Mark the day as a rest day or a public holiday where it applies — that changes how the whole shift is paid, not just the hours past the threshold.
- 3
Export the CSV
The file carries both the human format and decimal hours, because payroll systems want 7.40 while people want 7h 24m. A total row is included, so the figure you hand over and the figure you can check are in the same file. Every field is quoted, which is what stops a note containing a comma from shifting every column to its right.
Frequently asked questions
Does it handle shifts that run past midnight?
Yes. When the finish time is earlier than the start time the shift is treated as crossing into the next day, so 22:00 to 06:00 is eight hours. This is the normal case for shift work, and it is where hastily written calculators produce negative numbers.
How is overtime worked out?
Anything past the daily threshold you set is paid at the overtime multiplier. Rest days and public holidays are paid at their own multiplier for the whole shift instead, which is how most rest-day rules are written — the day itself is the premium.
Why decimal hours as well as hours and minutes?
Payroll systems take 7.40, people read 7h 24m. Converting by hand is where mistakes creep in, so the CSV carries both.
Is my data uploaded?
No. Shifts and rates stay in your browser using local storage, so the list survives closing the tab. Nothing is sent anywhere, and clearing your browser data removes it.
Does this match my country’s employment law?
Only if the multipliers you enter match it. Overtime rules, rest-day premiums and holiday rates differ by country and often by contract, which is why every rate here is editable rather than fixed. Check the figures against your own terms.
Why are times entered as text rather than a time picker?
Native time pickers vary a lot between browsers and phones, and several make entering 22:00 slower than typing it. A plain 24-hour field is faster once you have more than a few shifts, and invalid entries are flagged.
How are unpaid breaks handled?
Break minutes come off the shift before anything else is calculated — before pay, and before the overtime threshold. That ordering matters more than it sounds: a 30-minute unpaid break on a 9-hour shift leaves 8.5 worked hours, so with an 8-hour threshold you are owed half an hour of overtime rather than a full hour. If you enter a break longer than the shift itself, the row is flagged instead of quietly producing a negative number.
Why do rest days and public holidays not show any overtime?
Because on those days the whole shift is paid at that day’s multiplier, not just the hours past the threshold. That is how most rest-day and holiday rules are written — the day itself is the premium, so splitting it into normal and overtime hours would double-count it. If your contract does layer overtime on top of a rest-day rate, enter the shift as a normal day with the base rate adjusted to match.
What if my shift is exactly 24 hours long?
Entering 09:00 to 09:00 gives zero, not twenty-four. There is no way for the tool to tell a 24-hour shift apart from a mistyped one, and guessing wrong in the generous direction would quietly inflate someone’s pay claim. Split a genuine round-the-clock shift into two rows.
Are any country’s overtime rules built in?
None, deliberately. Overtime thresholds, rest-day premiums and holiday rates differ by country, by industry and very often by individual contract, and a rate that ships built in looks authoritative while being wrong for most of the people reading it. That is the same reason no public holiday list ships anywhere on this site. Every multiplier here is editable, and the ones you set are the ones used.
Can I use this to check a payslip I have already been given?
That is one of the better uses for it. Enter the shifts as they were actually worked, set the multipliers from your contract rather than from the payslip, and compare the total. Where the two disagree, the per-day breakdown shows which shift caused it — usually a break that was deducted twice, a rest day recorded as a normal day, or a shift crossing midnight that was counted on the wrong side of it.
Does it round the hours?
Worked time is handled in whole minutes and only converted to decimal hours for the export, so nothing is rounded away in the middle of the calculation. If your employer rounds shift times to the nearest quarter hour, enter the rounded times — the tool will not apply a rounding rule it has not been told about.
Will the CSV open correctly in Excel?
Yes. Every field is quoted and internal quotes are doubled, so names with apostrophes and notes with commas do not shift the columns — which is the way a hand-built CSV usually fails, silently.