Fraction of quarter elapsed
At noon UTC on 15 February 2024 the first quarter is exactly half over: a fraction of 0.5. Enter a date, or a date and time with its offset, to see how much of its quarter has passed and how much remains, measured in seconds. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Datetime
- 2024-02-15T12:00:00Z
- Year
- 2,024
- Month
- 2
- Day
- 15
- Hour
- 12
Fraction of quarter elapsed answers a precise operations question: at an explicit civil instant, how far through the current Gregorian calendar quarter has the clock already moved, expressed as a continuous number between zero and one rather than as a whole-day count or a year-level percentage. Finance teams scheduling quarterly closes, product dashboards painting quarter progress bars, and SLA calendars that reset on quarter boundaries all need that share without depending on the host machine clock or local daylight-saving tables. This calculator accepts a single ISO-8601 datetime (or a date-only string treated as midnight UTC), converts the instant to coordinated universal time, identifies which of the four calendar quarters contains it, measures seconds from the quarter’s first midnight to that instant, and divides by the full length of the quarter in seconds.
How the fraction of a calendar quarter is computed in UTC
Begin with an explicit timestamp written in ISO-8601 form so every client agrees on the same civil components: four-digit year, two-digit month, two-digit day, and optionally hours, minutes, seconds, a fractional second that this engine truncates to whole seconds, and either a trailing Z for UTC or a numeric offset such as plus or minus hours and minutes. Date-only strings without a time part are treated as midnight at the start of that civil day in UTC.
The parser rejects wrong shapes, out-of-range months, impossible days such as the thirty-first of April, and non-leap February twenty-nine, so bad data never becomes a made-up progress value. Map the UTC month to the standard Gregorian calendar quarter: January through March is quarter one, April through June is quarter two, July through September is quarter three, and October through December is quarter four.
The quarter starts at midnight UTC on the first day of its first month and ends exclusively at midnight UTC on the first day of the next quarter, so the first second of a quarter has fraction zero and the last second of a quarter has a fraction that approaches one without stepping into the next quarter.
Elapsed seconds equal the UTC epoch of the input minus the UTC epoch of the quarter start; quarter length equals the next-quarter start epoch minus the current quarter start epoch, which automatically accounts for ninety-day, ninety-one-day, or ninety-two-day quarters and for the extra February day in leap years during quarter one. The reported fraction is elapsed seconds divided by quarter length, cleaned to a stable twelve-significant-digit float for reproducible goldens. Remaining fraction is one minus that value, and remaining seconds complete the countdown view.
Where fraction-of-quarter progress shows up in real work
Product and finance teams draw quarter progress bars for OKRs, revenue targets, and board packs and need a continuous zero-to-one share that matches civil quarter boundaries rather than a whole-day counter that ignores intra-day progress. Operations and SRE calendars that reset error budgets or capacity plans on quarter starts use the same fraction to place the current UTC instant on a normalized axis for alerts and reports.
Marketing and sales ops schedule campaigns and quota periods by asking how much of the current quarter has already elapsed when a launch or checkpoint is fixed in ISO form. Software that must stay free of host time-zone libraries still needs a pure UTC quarter fraction for compliance windows, billing cycles, and personal productivity widgets defined by calendar quarters.
If you later need only a whole-day count of days elapsed in the quarter, the calendar quarter number without a fraction, the inclusive start and end dates of a named quarter, or year-level progress as a percentage, treat those as separate search intents and landings rather than overloading this fraction-of-quarter-elapsed page.
What you can do with it
Quarterly OKR and finance dashboards
Convert any ISO datetime to a 0–1 quarter progress fraction so progress bars and remaining-fraction labels stay leap-aware and UTC-stable without host clocks.
SLA and error-budget calendars
Place the current checkpoint on a normalized quarter axis for alerts and reports that reset at Q1–Q4 boundaries.
FAQ
How is the fraction of the quarter calculated?
fraction = (UTC epoch of the datetime − UTC epoch of the quarter start) ÷ (UTC epoch of the next quarter start − quarter start). Q1 is Jan–Mar, Q2 Apr–Jun, Q3 Jul–Sep, Q4 Oct–Dec. The result lies between 0 and 1.
Is this the same as days elapsed in the quarter?
No. Days elapsed returns a whole-day integer count from the quarter start date. This capability returns a continuous fraction of the full quarter duration at an explicit datetime, which is a different search intent.
Does a leap year change the fraction?
Yes for Q1. Leap years add February 29, so Q1 is 91 days (7,862,400 seconds) instead of 90. The same February–March instant therefore maps to a slightly smaller fraction in a leap year.
What happens if the datetime is invalid?
Wrong shape, out-of-range month, impossible days such as 2023-02-29, or invalid time components are rejected and not charged.
What does it cost?
The browser tool is free and runs locally.
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/fraction-of-quarter-elapsed \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"datetime":"2024-02-15T12:00:00Z"}'const res = await fetch("https://api.kit.forhosting.com/date/fraction-of-quarter-elapsed", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"datetime": "2024-02-15T12:00:00Z"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/fraction-of-quarter-elapsed",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"datetime": "2024-02-15T12:00:00Z"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/fraction-of-quarter-elapsed", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"datetime":"2024-02-15T12:00:00Z"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"datetime":"2024-02-15T12:00:00Z"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/fraction-of-quarter-elapsed", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"datetime": "2024-02-15T12:00:00Z"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.fraction_of_quarter_elapsed",
"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
The response also returns remaining fraction, elapsed and remaining seconds, quarter labels, and the inclusive start and end calendar dates so clients can render progress and countdowns from one deterministic payload. Impossible calendar days and malformed timestamps fail with a clear invalid_input error instead of a silent wrap.
What you send, what you get back, and how errors behave
Send one required string field named datetime containing a strict ISO-8601 instant such as two thousand twenty-four hyphen zero two hyphen one five T twelve colon zero zero colon zero zero Z, or a date-only string such as two thousand twenty-four hyphen zero four hyphen zero one. Days that match the pattern but are not real Gregorian dates, including non-leap February twenty-nine and month values outside one through twelve, also fail with a message that names the problem so clients can correct the input without guessing. Classic checks include the first midnight of January mapping to fraction zero in quarter one, mid-February near half of a leap or common first quarter depending on leap status, the first second of April mapping to zero in quarter two, and the last second of a quarter approaching one while remaining inside that quarter. Aliases date, iso, at, when, value, and on are accepted with the same meaning so existing clients can wire the field without renaming. Missing fields, non-string values, empty strings, and strings that do not match the supported ISO shape fail with invalid_input and are not charged. On success the response echoes a normalized UTC datetime with a Z suffix, the numeric year, month, day, hour, minute, and second in UTC, the quarter number from one to four, a quarter_label such as Q2, a human months range string, quarter_start and quarter_end as inclusive YYYY-MM-DD calendar dates, an is_leap_year boolean that matters for first-quarter lengths, elapsed_seconds and remaining_seconds integers, quarter_seconds as the full quarter duration, fraction and remaining_fraction in the unit interval, and a short formula string that documents the UTC definition. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where fraction-of-quarter progress shows up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
Campaign and quota checkpoints
Stamp launches and sales quotas with a deterministic quarter fraction from strict ISO inputs, with clear invalid_input on bad timestamps.