Working days remaining in month
The working days remaining in month calculator counts weekdays from an explicit ISO date through the final calendar day of that same month.
Run — free
The starting date is included when it is Monday through Friday, while Saturdays, Sundays, and optional holiday dates are excluded. Because the calculation uses pure Gregorian calendar arithmetic in UTC and never reads the current clock, the same input always produces the same result. The response also separates calendar days, weekend days, and excluded holiday days so the final total is easy to audit.
Choose the date that begins the count
Provide one explicit calendar date in the strict YYYY-MM-DD form, such as 2026-07-20. That date establishes both the first possible working day and the month whose final day closes the interval. The calculation is inclusive, so a Monday starting date can contribute one day immediately; a Saturday starting date cannot. There is no hidden reference to today, a server timezone, or a browser locale. This makes the result appropriate for repeatable reports, scheduled workflows, tests, and records that may be recomputed later. The response includes the normalized starting date, the month-end date, and the number of calendar days inspected. It also states that the interval is inclusive. If you need a count that begins tomorrow, send tomorrow’s explicit ISO date rather than subtracting or relying on an unstated convention. Invalid dates, including impossible leap days or non-padded month and day values, are rejected instead of being silently corrected into another date. Years from 0001 through 9999 are handled with Gregorian leap-year rules.
Exclude weekends and holidays without double counting
Every date from the supplied day through month end is classified exactly once. Saturday and Sunday enter the weekend total. A Monday-through-Friday date listed in the optional holidays array enters the holiday total. All other weekdays enter the working-days total. Holiday entries outside the selected interval are valid but have no effect, which lets a caller pass a reusable annual or regional holiday list without trimming it for every request. A holiday that lands on a weekend does not reduce the answer twice, and duplicate holiday strings are treated as one exclusion. Each holiday must still be a real, strict ISO calendar date so malformed configuration is caught early. The API does not guess public holidays from a country code because holiday rules change by jurisdiction, employer, and year. Supplying the dates explicitly keeps the result transparent and deterministic. This tool models a conventional Monday-to-Friday workweek; it does not reinterpret Friday or Sunday as a weekend for region-specific schedules, and it does not apply half-day rules.
Read, verify, and automate the result
Use workdays_remaining as the primary answer. The supporting fields make it possible to verify the arithmetic: calendar_days equals weekend_days plus holiday_days plus workdays_remaining. The month_end field shows the exact boundary, which is especially useful for February and leap years, while holiday_days reports only weekday holidays that actually changed the total. This structure works well in payroll cutoffs, delivery planning, monthly capacity dashboards, service-level forecasts, and personal deadline calculations. For an automated integration, persist the input date and holiday list alongside the response so future reviewers can reproduce the same number. The endpoint costs $0.002 per request through the API, and each request represents one calculation regardless of the number of supplied holidays. Processing is local calendar arithmetic: it makes no network requests and does not consult a live holiday service. If your business calendar has shutdown periods, add each affected weekday as an explicit holiday. If you instead need business days between arbitrary dates or need to add a duration to a date, use a range-counting or workday-addition capability.
What you can do with it
Monthly staffing capacity
Estimate the remaining weekday capacity in the current planning month from a fixed reporting date and company closure list.
Invoice and payroll cutoffs
Count the available processing days before month end while excluding weekends and known office holidays.
Reproducible deadline reports
Store an explicit date and holiday list so a month-end countdown can be recalculated later with the identical result.
FAQ
Is the starting date included?
Yes. It counts when it is Monday through Friday and is not listed as a holiday.
Does the calculator use today's date?
No. You must provide the date explicitly, and the system clock is never read.
What happens when a holiday is on a weekend?
It is counted only as a weekend day, so it does not reduce the working-day total twice.
Can I pass holidays from other months?
Yes. Valid holiday dates outside the inclusive interval are ignored and do not change the result.
What workweek does it use?
It treats Monday through Friday as working days and Saturday and Sunday as weekends.
How much does an API calculation cost?
Each API request costs $0.002. The browser execution is available without an API charge.
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/workdays-remaining-month \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2026-07-20"}'const res = await fetch("https://api.kit.forhosting.com/date/workdays-remaining-month", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"date": "2026-07-20"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/workdays-remaining-month",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"date": "2026-07-20"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/workdays-remaining-month", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"date":"2026-07-20"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"date":"2026-07-20"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/workdays-remaining-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
{
"date": "2026-07-20"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.workdays_remaining_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. |