Standard shift with lunch
9:00 AM–5:30 PM is 8:30 gross. A 30-minute unpaid lunch gives 8:00 net, or 8.00 decimal hours.
Date & Time
Calculate daily and weekly work hours from clock-in and clock-out times, including breaks, overnight shifts, decimal totals and optional overtime.
Content last reviewed
Time display
Time fields use your browser’s accessible native picker; summaries follow this display choice.
Overtime is an educational split using your thresholds, not a legal determination. Rounding is always shown; employer rules and labor laws vary.
Shifts belong to the day they start. Overnight clock-outs are treated as the following day. Wall-clock times do not automatically adjust for daylight-saving changes.
Daily total: 0:00 (0.00)
No shifts. Add one when this day is worked.
Daily total: 0:00 (0.00)
No shifts. Add one when this day is worked.
Daily total: 0:00 (0.00)
No shifts. Add one when this day is worked.
Daily total: 0:00 (0.00)
No shifts. Add one when this day is worked.
Daily total: 0:00 (0.00)
No shifts. Add one when this day is worked.
Daily total: 0:00 (0.00)
No shifts. Add one when this day is worked.
Daily total: 0:00 (0.00)
No shifts. Add one when this day is worked.
Open a weekday, add a shift, and enter clock-in and clock-out using the browser’s time picker.
Add duration-only or timed breaks and mark each one paid or unpaid so the subtraction is visible.
Resolve overlap warnings, review HH:MM and decimal totals, then copy, share, print, save a template, or export CSV.
9:00 AM–5:30 PM is 8:30 gross. A 30-minute unpaid lunch gives 8:00 net, or 8.00 decimal hours.
10:00 PM–6:30 AM is inferred as 8:30 across midnight. Subtracting 0:30 unpaid gives 8:00 net.
8:00 AM–12:00 PM plus 2:00 PM–6:00 PM gives an 8:00 daily total without overlap.
A 43:30 week with a user-selected 40:00 weekly threshold is divided into 40:00 regular and 3:30 overtime.
A 9:00 gross shift with 0:20 paid breaks and 0:30 unpaid lunch reports both categories and gives 8:30 net.
Input
Monday: 09:00–17:30; lunch: 30 minutes unpaidOutput
Gross 8:30 · Unpaid 0:30 · Net 8:00 · Decimal 8.00Input
Friday: 22:30–07:15; break: 00:30–01:00 unpaidOutput
Net 39:45 · Decimal 39.75 · Regular and overtime based on the selected thresholdA work-hours calculator turns clock-in and clock-out entries into a time card without requiring an account, employee database, or full scheduling platform. This one is designed for the common independent task: record one or more shifts on each weekday, describe paid and unpaid breaks, and see daily and weekly totals in both hours-and-minutes and decimal hours. It works for an hourly worker checking a time card, a freelancer preparing an invoice, a manager reviewing a draft schedule, a contractor documenting site hours, or a student balancing work and study blocks.
The calculator treats time as whole minutes. A 9:00 AM clock-in and 5:30 PM clock-out create 510 gross minutes. A 30-minute unpaid lunch reduces that to 480 worked minutes, displayed as 8:00 and 8.00 decimal hours. A paid break is reported separately but remains inside worked time. That distinction is important: the tool never hides whether a break was deducted.
Overnight shifts use a clear rule. If clock-out is earlier than clock-in, clock-out is treated as occurring on the following day. A shift from 10:00 PM to 6:30 AM therefore lasts 8 hours 30 minutes. After a 30-minute unpaid break, net worked time is 8 hours. The entire shift belongs to the weekday on which it started, preventing the same minutes from being added to two days. Because the interface uses wall-clock times rather than timezone-aware attendance records, daylight-saving transitions require manual review.
Each day can contain multiple shifts, which supports split schedules such as 8:00 AM–12:00 PM and 2:00 PM–6:00 PM. The calculator checks those shifts on a shared timeline. If one overlaps another, the weekly total is blocked until the conflict is corrected instead of silently counting the same minutes twice. Timed breaks are also checked for overlap and must stay within their shift. Duration-only breaks are useful when exact lunch timestamps are not available.
Weekly totals include gross scheduled time, paid breaks, unpaid breaks, net worked time, shift count, and overnight-shift count. Optional overtime settings divide net minutes into regular and overtime portions using thresholds chosen by the user. Daily, weekly, both, or disabled modes are available. These are arithmetic labels only. The calculator does not infer a country, state, contract, employer policy, or legally required overtime rule, and it does not estimate wages.
Rounding is similarly explicit. Users may leave times unrounded or choose 5-, 6-, 10-, or 15-minute intervals, then round to the nearest interval, always up, or always down. Rounding can apply to clock-in and clock-out, the final shift total, or both. When a result changes, the original and rounded totals appear together. No rounding happens silently, and users should confirm whether any rounding method is permitted for their records.
Recurring schedules can be saved as local templates. A template contains days, shifts, breaks, overtime settings, time display, and rounding preferences, but it does not require an employee name. Templates can be applied, renamed, duplicated, deleted, or cleared. Browser storage is device- and profile-specific, so clearing site data removes them. CSV and print output are generated locally. Share links encode the current time-card structure and settings but deliberately remove notes and do not include names, emails, employer details, or payroll identifiers.
Choose Weekly time card for a seven-day schedule, Single shift for a quick duration, or Templates to manage recurring weeks.
In weekly mode, use Add shift under any weekday. Enter clock-in and clock-out. The shift belongs to the day where it starts; an earlier clock-out is interpreted as the following day and labelled overnight.
Add as many breaks as needed. Choose Duration only when you know the number of minutes, or Start and end when exact timestamps matter. Mark every break paid or unpaid. Only unpaid breaks reduce net worked time.
Add split shifts or copy a recurring shift to another day. Duplicate and delete controls operate on one shift. Clear day removes all shifts on that day after confirmation.
Set 12-hour or 24-hour summary display. Native time fields follow the accessible picker supplied by your browser and operating system.
Optionally choose daily, weekly, or combined overtime thresholds. They are your educational split, not a statement of local law. Configure rounding only when needed and review the original-to-rounded message.
Resolve any missing-time, break, or overlap errors. The weekly summary then shows gross, break, net, regular, overtime, decimal, shift, and overnight totals.
Copy the summary or decimal total, save the week as a local template, export UTF-8 CSV, open the clean print view, or copy a privacy-filtered share link.
Add, duplicate, delete, clear, and copy shifts across Monday through Sunday in mobile-friendly day cards.
Use duration-only or timed breaks; unpaid minutes reduce work while paid minutes remain included and visible.
Infer next-day clock-outs, assign overnight work to its start day, and block totals for overlapping shifts or timed breaks.
Show every duration as hours and minutes alongside a decimal-hours value calculated from exact minutes.
Choose daily, weekly, combined, or disabled thresholds and optional visible 5-, 6-, 10-, or 15-minute rounding.
Manage recurring weeks in browser storage and create links that exclude notes and personal identifiers.
Export the current calculation as escaped UTF-8 CSV or print a clean black-and-white time-card summary.
Recalculate a draft time card from clock punches before comparing it with an official record.
Combine project shifts, convert minutes to decimal hours, and use the total when preparing an invoice.
Review proposed shift coverage, lunch deductions, split shifts, and total scheduled hours without storing employee data.
Track part-time work, lab, placement, or study blocks with the same minute-based arithmetic.
Save a standard week, evening rotation, weekend pattern, or class-and-work template in the current browser.
Each clock value is converted to minutes after midnight: 9:15 AM becomes 555 and 5:30 PM becomes 1,050. When clock-out is numerically earlier than clock-in, 1,440 minutes are added to clock-out. Gross duration is adjusted clock-out minus clock-in. Equal start and end times are rejected rather than assumed to mean a 24-hour shift.
Duration-only breaks contribute the entered number of minutes. Timed breaks are placed on the same shift timeline, including across midnight, checked against shift boundaries, and compared with other timed breaks for overlap. Paid and unpaid totals are accumulated independently. Net worked time equals gross time minus unpaid breaks; paid breaks remain in net worked time.
Valid shift results are summed as integers. Overlapping shifts cause a day error and block the weekly result. Daily overtime, when enabled, is the portion of each day above the chosen threshold. In combined mode, daily overtime is separated first; the weekly threshold then applies to the remaining regular minutes, avoiding double classification.
Decimal hours are produced only for display or export by dividing total minutes by 60 and rounding to two decimal places. Rounding uses the chosen interval and direction. Time rounding changes clock boundaries; total rounding changes the final shift duration. Selecting both applies those operations in that order.
Browser-native time inputs normalized to minutes after midnight.
HH:MM and decimal hours to two decimal places.
UTF-8 comma-separated values with quoted commas, quotes, and line breaks.
A4-friendly browser print view with repeated table headings where supported.
Versioned URL-safe state containing shifts and settings but excluding notes.
Duration-only or start/end, paid or unpaid, with multiple breaks per shift.
Disabled, daily threshold, weekly threshold, or both, using user-entered hours.
None or 5, 6, 10, or 15 minutes; nearest, up, or down; applied to times, totals, or both.
12-hour or 24-hour summaries while native inputs retain accessible operating-system behavior.
Create, apply, rename, duplicate, delete, and clear browser-local recurring weeks.
Seven hours thirty minutes is 7.50 decimal hours because 30 minutes is half an hour.
Paid breaks are reported but remain included in net worked time; only unpaid breaks are deducted.
An earlier clock-out is interpreted as the next day. The full shift stays assigned to its start day.
Two shifts or timed breaks that cover the same minutes must be corrected before weekly totals are available.
A selected daily or weekly threshold is only an arithmetic preference and may not match applicable rules.
The calculator accepts wall-clock times and does not attach a timezone or calendar date to each shift. It therefore cannot automatically resolve daylight-saving changes, historical timezone rules, leap seconds, or employer-specific punch corrections. A shift must be under 24 hours and equal clock times are treated as invalid, not a full day. Duration-only breaks cannot be checked for timestamp overlap because they have no position inside the shift; use timed breaks when that validation matters.
Overtime output is a user-defined arithmetic split, not a legal entitlement or payroll rule. The tool does not calculate pay, overtime multipliers, taxes, deductions, benefits, leave, premiums, rounding compliance, or multi-week overtime. Share links can become long for unusually dense schedules and are capped for practicality. Browser-local templates do not synchronize between devices.
All shift, break, rounding, and overtime calculations run in the browser. No work-time entry is posted to an external API or written to MongoDB. Templates use local storage in the current browser and can be removed by clearing site data. CSV files and print output are generated locally.
Share links contain shift times, break settings, thresholds, time display, and rounding preferences. Notes are removed before encoding, and the interface does not request employee names, employer names, email addresses, payroll IDs, or account details. Users should still inspect a link before sharing and avoid putting sensitive information in optional notes.
Enter shifts from a reliable source and compare each day before relying on the weekly total.
Use timed breaks when exact placement and overlap checking matter; use duration-only breaks for simple deductions.
Keep paid and unpaid break rules explicit instead of entering one combined lunch value.
Review every overnight and daylight-saving shift manually against the official clock record.
Choose overtime and rounding settings only from the rule you actually intend to model.
Export or print important weeks because browser-local templates are not a permanent backup.
Keep optional notes general and never place personal or payroll identifiers in a time-card share link.
Start with clock punches, calendar entries, or contemporaneous notes rather than reconstructing a week from memory. Enter one shift at a time and check its gross, break, and net row before moving on. When a day uses a split shift, leave the unpaid gap between shifts rather than adding it as a break inside one continuous shift.
The calculator answers “how many minutes fall above this threshold?” It cannot answer whether those minutes must receive a particular legal treatment. Label the threshold as the rule being tested, confirm rounding and paid-break assumptions, and compare output with the relevant contract, policy, or official guidance.
Use CSV when further analysis or invoicing is needed and print when a human-readable time card is useful. Local templates are convenient starting points, not attendance records. For adjacent planning tasks, use the Business Days Calculator, Date Difference Calculator, Countdown Timer, or Invoice Generator.
The client-side engine is a standalone ES module. Time parsing normalizes 12-hour or 24-hour strings to integers from 0 through 1,439. Overnight end times receive a 1,440-minute offset. Shift, timed-break, and same-day shift intervals are compared numerically; conflicts throw descriptive validation errors. Week aggregation never sums formatted strings or decimal-hour values.
Shared state uses versioned JSON encoded as URL-safe Base64. A sanitizer caps days, shifts, breaks, note length, settings, and accepted enum values. Notes are removed before encoding, malformed state returns null, and oversized links are rejected. Templates pass through the same week sanitizer and corrupted JSON returns an empty list.
CSV generation performs standard quote doubling and wraps cells containing commas, quotes, carriage returns, or newlines. The browser prepends a UTF-8 byte-order mark for spreadsheet compatibility. Print output is rendered into a dedicated body-level root because the project isolates printable documents from application navigation.
A work-hours calculator is narrower than workforce-management or payroll software. It is faster for an independent check and keeps data local, but it does not approve punches, schedule employees, synchronize devices, calculate wages, retain audit logs, or enforce policy. HH:MM is best for human reading; decimal hours are useful for multiplication and spreadsheets. A template is a reusable input pattern, not proof that a shift occurred.
Hourly workers checking daily or weekly totals, freelancers converting time to invoice-ready decimal hours, contractors documenting shifts, managers reviewing draft schedules without uploading employee data, students tracking work or study blocks, and small teams that need a quick time-card calculation rather than a full tracking platform. Anyone making payroll, legal, tax, or compliance decisions should use an authoritative record and qualified guidance in addition to this arithmetic tool.
Convert both times to minutes, place an earlier clock-out on the next day, and subtract clock-in from adjusted clock-out.
Add the lunch as an unpaid break. Its minutes are deducted from gross shift time to produce net worked time.
Yes. When clock-out is earlier than clock-in, it is treated as the following day and the shift is assigned to its start day.
The calculator infers a shift across midnight instead of returning a negative duration.
Yes. Add split or separate shifts; overlapping shifts must be corrected before the weekly total is calculated.
Yes. Each shift supports multiple duration-only or timed breaks, each marked paid or unpaid.
Unpaid breaks reduce net worked time. Paid breaks are shown separately but remain included in net worked time.
Divide total minutes by 60. Seven hours fifteen minutes is 435 ÷ 60 = 7.25 hours.
No. Thirty minutes is half an hour, so 7:30 equals 7.50 decimal hours.
Yes. Enable weekly overtime and enter your own threshold; daily and combined modes are also available.
No. It only separates minutes using the threshold you choose. Applicable rules vary by location, employer, contract, and industry.
Yes. Summaries can use either display. Native time inputs follow your browser and operating-system picker.
Choose an interval, direction, and whether rounding applies to clock times, the final shift total, or both. Changed results show the original total.
Yes. Save the current week as a template, then apply, rename, duplicate, or delete it.
In local storage in the current browser profile. They are not uploaded or synchronized.
Yes. Export the current valid week as UTF-8 CSV or use the clean browser print view.
No. Shift calculations stay in the browser, and MongoDB stores only the public tool description.
Yes. Copy share link includes times and settings but removes all notes and does not request personal identifiers.
Payroll may use approved edits, different rounding, timezone-aware dates, paid-break rules, or overtime methods. Compare assumptions line by line.
No. It provides browser-based time arithmetic only and makes no wage, tax, payroll, employment-law, or compliance determination.