Timezone offset difference
When it is 15:30 at UTC+2, it is 08:30 at UTC−5, seven hours behind. Enter two fixed offsets and a local time to get the gap between the clocks and the matching time, with a note when midnight is crossed. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Offset a
- 2
- Offset b
- -5
- Hour a
- 15
- Minute a
- 30
- Time a
- 15:30
- Offset a label
- UTC+2
- Offset b label
- UTC−5
- Hour diff
- -7
A timezone offset difference tool answers a narrow but common question: if one place is fixed at UTC plus or minus N hours and another at M hours, how many hours apart are their clocks, and what local time is it at B when it is a given hour at A? Enter two fixed offsets in hours from Coordinated Universal Time—whole hours such as plus two or minus five, or fractional civil offsets such as plus five point five for India—and a twenty-four-hour local clock at location A. The calculator returns the signed hour difference B minus A, the absolute separation, the mapped local clock at B with a calendar-day note when midnight is crossed, and step-by-step arithmetic you can check by hand.
Fixed UTC offsets versus named time zones
Civil time is often published as a fixed offset from Coordinated Universal Time: UTC plus two for a winter schedule in Central Europe, UTC minus five for Eastern Standard Time, UTC plus five hours thirty minutes for India Standard Time, or UTC plus fourteen for Line Islands. A fixed offset is a single real number of hours—positive east of the prime meridian in the usual sign convention, negative west—without a seasonal flip.
Named zones such as America/New_York or Europe/Paris are different: they are identifiers in the IANA database whose effective offset can change when daylight-saving rules apply. This capability does not resolve city names, country codes, or zone identifiers and does not call Date or a tz database. You supply the two offsets you already know from a schedule, a ticket, a server config, or a style guide, and you get the pure arithmetic difference between those numbers plus a local-time mapping.
That split of intent matters for search and for correctness: people who type timezone offset difference or UTC hours between two offsets want a calculator that will not silently apply DST and invent a spring-forward gap. People who need New York versus Tokyo with DST should use a full zone converter instead. Fourteen hours is the practical outer bound of real civil offsets in use; values beyond that range are treated as data-entry errors rather than exotic half-day schemes.
What you can do with it
Meeting math with published UTC± labels
Teams that already know both sides as fixed offsets convert a local start time at A into the clock colleagues see at B without opening a full timezone database.
Travel notes and schedule cross-checks
Travelers compare ticket offsets (for example UTC+1 versus UTC−5) and verify what local arrival-side clock a departure-side time maps to, including next-day wrap.
FAQ
What is a fixed UTC offset?
A fixed UTC offset is a constant number of hours from Coordinated Universal Time (for example +2 or −5), without applying named-zone daylight-saving rules. This tool only accepts those numbers.
What happens if an offset exceeds ±14 hours?
Real civil offsets stay within about ±14 hours; values outside that range are treated as errors.
Does this handle daylight saving time?
No. There is no IANA database and no Date usage. Supply the fixed offsets that already apply for the date you care about.
Is the timezone offset difference calculator free?
The browser tool is free and runs locally.
What does a negative hour difference mean?
The difference is the second offset minus the first. A negative result, such as minus 7 from UTC+2 to UTC−5, means the second place's clock is behind; a positive one means it is ahead.
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/travel/timezone-offset-diff \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"offset_a":2,"offset_b":-5,"hour_a":15}'const res = await fetch("https://api.kit.forhosting.com/travel/timezone-offset-diff", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"offset_a": 2,
"offset_b": -5,
"hour_a": 15
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/timezone-offset-diff",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"offset_a": 2,
"offset_b": -5,
"hour_a": 15
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/timezone-offset-diff", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"offset_a":2,"offset_b":-5,"hour_a":15}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"offset_a":2,"offset_b":-5,"hour_a":15}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/timezone-offset-diff", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"offset_a": 2,
"offset_b": -5,
"hour_a": 15
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.timezone_offset_diff",
"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.
Limits
max_abs_offset_hours | 14 |
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
Offsets outside plus or minus fourteen hours are rejected with invalid_input.
Fixed UTC offsets versus named time zones
By keeping the contract to fixed numbers in the closed interval from minus fourteen through plus fourteen hours, the tool stays predictable for spreadsheets, API tests, and travel notes that already print UTC± labels.
How to call the API and read the response
Send a JSON body with required finite numbers offset_a and offset_b (aliases include a, from_offset, offset_from, utc_a for the first, and b, to_offset, offset_to, utc_b for the second), each within minus fourteen to plus fourteen inclusive, plus required integer hour_a from zero through twenty-three for the local hour at A. Optional minute_a defaults to zero and must be an integer from zero through fifty-nine when present. On success the response echoes rounded offsets and the input clock, publishes offset_a_label and offset_b_label as short UTC± strings, sets hour_diff to offset_b minus offset_a, abs_diff_hours to the absolute value of that difference, hour_b and minute_b and time_b for the mapped clock at B, day_offset for how many midnights were crossed when adding the difference, day_note and direction as short English summaries, message as a one-line result, and steps as an ordered array of substitution lines. Failed validation—missing fields, non-finite numbers, non-integer hour or minute, hour outside zero to twenty-three, minute outside zero to fifty-nine, or any offset whose absolute value exceeds fourteen hours—returns invalid_input and is never charged. Pricing is a flat $0.002 per successful request with unit item and zero marginal unit price.
Practical tips, limits, and related searches
Keep offsets inside the published plus-or-minus fourteen hour window; values such as fifteen or minus fourteen point one are rejected so callers cannot invent impossible civil offsets. Prefer fractional hours for half-hour and three-quarter-hour zones—five point five for India, five point seven five for Nepal, nine point five for parts of Australia—rather than smuggling minutes into a second field that does not exist for the offset itself. Prefer this capability when both ends already publish fixed UTC± labels; if you only have city names, resolve offsets first or use a DST-aware zone tool. When mapping a local clock, remember the signed difference is always B minus A: if A is UTC plus two and B is UTC minus five, hour_diff is minus seven, so fifteen thirty at A becomes eight thirty the same calendar day at B. Crossing midnight sets day_offset to plus one or minus one and the day_note string explains which side of midnight B lands on relative to A. Pair examples when teaching: same offset leaves the clock unchanged; whole-hour westbound travel subtracts hours; eastbound adds hours; a half-hour offset produces a thirty-minute shift; an out-of-range offset demonstrates the hard invalid_input path. This landing targets people searching for timezone offset difference, UTC offset hours between two places, or local time given two fixed offsets; it is not a flight-duration calculator, not a daylight-saving advisor, and not a city-name zone converter. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when learners deliberately send offset fifteen. Round-trip checks are easy: recompute offset_b minus offset_a by hand and confirm it equals hour_diff, then add that many hours to time_a and confirm time_b and day_offset match after twenty-four-hour wrap.
Integration use cases
Unit tests for offset arithmetic
Services that store fixed offsets generate golden hour_diff and time_b pairs, plus deliberate ±14-boundary and out-of-range invalid_input cases.
Technical questions
How is hour_diff defined?
hour_diff is always offset_b minus offset_a. Positive means B’s clock is ahead of A’s for the same instant; negative means B is behind.