# Work Hours Calculator

> Derives paid hours per day from shift start and end times minus unpaid breaks, scales them to a week (working days), an average month (52/12 weeks) and a year (52 weeks), and multiplies by an optional hourly rate for pay.

- Calculator id: `work-hours` · Category: Everyday Life (`everyday`) · Tool name: `calculate_work_hours`
- Canonical page: https://tttkmbb.com/everyday/work-hours · This document: https://tttkmbb.com/everyday/work-hours.md · JSON definition: https://tttkmbb.com/everyday/work-hours.json

## Purpose

Derives paid hours per day from shift start and end times minus unpaid breaks, scales them to a week (working days), an average month (52/12 weeks) and a year (52 weeks), and multiplies by an optional hourly rate for pay.

**Use when:** You want to know your working hours per week, month or year from a daily schedule, or the pay they represent at an hourly rate.

**Do not use when:** Shifts vary day by day (sum each with time-duration), or you need salary conversions between periods without shift times (use salary-converter).

## Input

| Parameter | Type | Unit | Required | Description |
| --- | --- | --- | --- | --- |
| `start_time` | string |  | required | Start of the working day, 24-hour HH:MM. |
| `end_time` | string |  | required | End of the working day, 24-hour HH:MM (an end time before the start time means the shift ends the next day). |
| `break_minutes` | integer | min | optional, default 0 | Unpaid break minutes per day. (min 0, max 1440) |
| `days_per_week` | integer | days | optional, default 5 | Number of such working days per week. (min 1, max 7) |
| `hourly_rate` | number |  | optional | Optional gross pay per hour; adds pay outputs. (min 0, max 100000) |

## Output

| Field | Type | Unit | Description |
| --- | --- | --- | --- |
| `hours_per_day` | number | h | (end − start − break) in hours. |
| `hours_per_week` | number | h | hours_per_day × days_per_week. |
| `hours_per_month` | number | h | hours_per_week × 52 / 12 (average month). |
| `hours_per_year` | number | h | hours_per_week × 52 (no holidays or leave deducted). |
| `daily_pay` | number |  | hours_per_day × hourly_rate (only when hourly_rate is given). |
| `weekly_pay` | number |  | hours_per_week × hourly_rate. |
| `monthly_pay` | number |  | hours_per_month × hourly_rate. |
| `annual_pay` | number |  | hours_per_year × hourly_rate (gross, before tax). |

## Formula

`hours_per_day = (end_time − start_time (+24 h if negative) − break_minutes) / 60; week = × days_per_week; month = week × 52 / 12; year = week × 52; pay = hours × hourly_rate`

A year is taken as exactly 52 weeks (2,080 h for a 40-hour week); the US OPM uses 2,087 h to average leap years. Public holidays, sick days and paid leave are not deducted, and overtime premiums are not applied.

## Data Sources

- US OPM – Computing Hourly Rates of Pay Using the 2,087-Hour Divisor — https://www.opm.gov/policy-data-oversight/pay-leave/pay-administration/fact-sheets/computing-hourly-rates-of-pay-using-the-2087-hour-divisor/ (government, retrieved 2026-09-23)

Data freshness: `static`. Deterministic formula with fixed constants; results never go stale. Inputs supplied by the caller determine the output.

## API

- `GET https://tttkmbb.com/api/v1/calculate/work-hours?start_time=…&end_time=…`
- `POST https://tttkmbb.com/api/v1/calculate/work-hours` with JSON body `{"inputs": {…}}`
- Response: unified envelope (`success`, `request`, `result.values`, `result.units`, `sources`, `freshness`, `timestamp`, `next_actions`, `links`); see https://tttkmbb.com/docs/response-format.md
- Schema: https://tttkmbb.com/api/v1/calculators/work-hours · OpenAPI operationId `calculate_work_hours` in https://tttkmbb.com/openapi.json
- Authentication: none. Rate limit: fair use, see https://tttkmbb.com/docs/rate-limits.md.

## MCP

- Server: `https://tttkmbb.com/mcp` (Streamable HTTP, JSON-RPC 2.0, no auth)
- Tool:  `run_calculator` with `{"calculator_id": "work-hours", "inputs": {…}}`

## Example

- 09:00–17:30, 30 min break, 5 days, 25/h: inputs `{"start_time":"09:00","end_time":"17:30","break_minutes":30,"days_per_week":5,"hourly_rate":25}` → `{"hours_per_day":8,"hours_per_week":40,"hours_per_month":173.33,"hours_per_year":2080,"daily_pay":200,"weekly_pay":1000,"monthly_pay":4333.33,"annual_pay":52000}`
- Night shift 22:00–06:00, 45 min break, 4 days: inputs `{"start_time":"22:00","end_time":"06:00","break_minutes":45,"days_per_week":4}` → `{"hours_per_day":7.25,"hours_per_week":29,"hours_per_month":125.67,"hours_per_year":1508}`

```
GET https://tttkmbb.com/api/v1/calculate/work-hours?start_time=09%3A00&end_time=17%3A30&break_minutes=30&days_per_week=5&hourly_rate=25
```

## Limitations

Shifts vary day by day (sum each with time-duration), or you need salary conversions between periods without shift times (use salary-converter). A year is taken as exactly 52 weeks (2,080 h for a 40-hour week); the US OPM uses 2,087 h to average leap years. Public holidays, sick days and paid leave are not deducted, and overtime premiums are not applied. All values are computed from the formula above; no measurement or live data is involved.

## FAQ

**Why 52/12 = 4.333 weeks per month?**

Months have 28–31 days, so payroll conventionally uses the average of 52 weeks divided by 12 months (about 173.33 h for a 40-hour week) rather than exactly 4 weeks.

**Is the break paid?**

break_minutes is subtracted as unpaid time. If your breaks are paid, enter 0.

## Related

- [Time Duration Calculator](https://tttkmbb.com/everyday/time-duration.md) — Length of a single shift.
- [Salary Converter](https://tttkmbb.com/finance/salary-converter.md) — Convert hourly pay to monthly or annual salary.
