Working days in month calculator
July 2026 has 23 working days: 31 calendar days minus 8 Saturdays and Sundays. Choose a year and a month, add your company holidays, and get one number for hour budgets, pro-rated pay or billing capacity. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Year
- 2,026
- Month
- 7
- Month name
- July
- Calendar days
- 31
- Weekend days
- 8
- Weekdays before holidays
- 23
Payroll, staffing, and delivery plans often need one number first: how many Monday-through-Friday working days sit inside a single calendar month. Counting them by hand is slow, and subtracting company holidays from a wall calendar is easy to get wrong when February shifts for leap years or when a holiday lands on a weekend. This working days in month calculator takes a year, a month from one to twelve, and an optional list of holiday dates, then returns the inclusive count of weekdays left after those holidays are removed.
What a working day means for a single month
A working day in this calculator is any Gregorian calendar day that falls on Monday, Tuesday, Wednesday, Thursday, or Friday inside the requested year and month, and that is not listed in the optional holidays array. Saturdays and Sundays never count, even when the month is long or short.
Holiday dates that land on a weekend do not change the total further, because those days were already excluded as weekends; only holidays that fall on a weekday inside that month reduce the working-day total, and those dates appear in the holidays list of the response so auditors can see exactly which non-working weekdays were applied. Dates in the holidays array that belong to a different month are validated as real calendar days but ignored for the count, so you can reuse a yearly holiday list without filtering it first.
The algorithm walks each civil day from the first through the last day of the month using pure arithmetic: month lengths follow the fixed Gregorian table with the standard leap-year rule for February, and weekdays follow the Sakamoto method.
Where monthly working-day counts earn their keep
HR and payroll teams use a working days in month calculator when setting monthly hour budgets, pro-rating salaries, or explaining why one billing month has more capacity than another. Project and operations managers compare theoretical weekday capacity against headcount before accepting delivery commitments that assume twenty-two workdays without checking the actual calendar. Finance and professional-services ops reconcile timesheets against the theoretical maximum working days in a billing period without opening a desktop spreadsheet for every client.
What you can do with it
Monthly payroll and hour budgets
Compute how many Mon–Fri working days fall in a payroll month, then subtract company holidays so hour budgets and pro-rated pay share the same number.
Billing period capacity
Professional-services and SaaS ops measure theoretical weekday capacity for a calendar billing month before comparing it to logged hours.
Staffing and delivery planning
Planners size monthly headcount plans against the true weekday count after regional holidays, without counting Saturdays or Sundays.
FAQ
How do I count working days in a month?
Send year and month as integers (month 1–12). Optionally pass holidays as an array of YYYY-MM-DD strings.
What if a holiday falls on a weekend?
Weekend holidays do not change the total further.
Can I paste a holiday list for the whole year?
Yes. Dates from other months are checked to be real days and then ignored, so one yearly list works for every month without filtering it first. Duplicate dates count only once.
Does a leap year change the February count?
Yes. In a leap year February gets its extra day, which can add a working day. A holiday on February 29 is accepted only in leap years: 2024-02-29 is valid, 2023-02-29 is rejected.
Can I see which holidays were subtracted?
Yes. The result lists every holiday that fell on a weekday inside the month and says how many there were, so anyone checking the figure sees exactly which days were removed.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/date/working-days-this-month \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"year":2026,"month":7}'const res = await fetch("https://api.kit.forhosting.com/date/working-days-this-month", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"year": 2026,
"month": 7
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/working-days-this-month",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"year": 2026,
"month": 7
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/working-days-this-month", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"year":2026,"month":7}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"year":2026,"month":7}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/working-days-this-month", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"year": 2026,
"month": 7
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.working_days_this_month",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Failed validation is not billed; successful calls use the published $0.002 base price with no model tokens and no outbound network.
Input contract, response fields, and error behaviour
Year is a Gregorian year in the supported range; month is an integer from one for January through twelve for December. Optional holidays is an array of ISO-8601 calendar strings in the form YYYY-MM-DD; omit it or pass an empty array when the month has no non-weekend closures. Each holiday is validated as a real Gregorian day, including February twenty-ninth only in leap years, so 2023-02-29 is rejected while 2024-02-29 is accepted. POST a JSON body with year and month as required integers. Aliases are accepted for convenience: y and yr map to year; m and mon map to month. On success the body returns the normalized year and month, month_name as the English month label, calendar_days as the full length of the month, weekend_days as the count of Saturdays and Sundays, weekdays_before_holidays as the Monday-through-Friday total before holiday subtraction, working_days as the final capacity after weekday holidays are removed, holidays_excluded as how many weekday holidays reduced the total, holidays as the sorted list of those weekday holidays inside the month, is_leap_year for the year, and a short formula string describing the rule. Example: year 2026 and month 7 with no holidays yields the full weekday count for July 2026; adding a midweek holiday such as 2026-07-04 reduces working_days by one and lists that date under holidays. Missing year or month, a month outside one through twelve, a non-array holidays value, or an invalid holiday date all raise invalid_input and are not billed.
Where monthly working-day counts earn their keep
Keep requests small, pin working_days in integration tests, and you get reproducible monthly capacity for payroll, SLA engines, invoice previews, and edge workers without standing up a full calendar service of your own.
Technical questions
Are weekends included?
No. Saturdays and Sundays never count toward working_days. They appear only in weekend_days and calendar_days.
Do holidays outside the requested month count?
No. They must still be valid dates if provided, but only holidays inside the same year and month can reduce working_days.
What does the working days in month calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.