ETA from distance and speed
150 km at a steady 60 km/h takes 2.5 hours, shown as 2 h 30 min. Enter the distance and the speed in matching units, such as miles and mph or nautical miles and knots, and get the travel time without traffic guesses. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Distance
- 150
- Speed
- 60
- Decimal hours
- 2.5
- Total minutes
- 150
- Hours
- 2
- Minutes
- 30
This ETA from distance and speed calculator turns a known route length and a constant travel speed into a clear duration in hours and minutes. Enter both values in matching units, such as kilometres with kilometres per hour or miles with miles per hour. The calculator divides distance by speed, preserves the decimal-hour result, and rounds the readable duration to the nearest whole minute. It is useful for quick plans, classroom exercises, dispatch estimates, and any situation where a transparent constant-speed calculation is more appropriate than a live traffic prediction.
Understand what this ETA calculation means
An estimated time of arrival can refer either to a clock time or to the amount of travel time remaining. This calculator focuses on the second meaning: it returns a duration from route distance and constant speed. The governing relationship is travel time equals distance divided by speed.
If a route is 150 kilometres long and the assumed speed is 60 kilometres per hour, the decimal duration is 2.5 hours, which is shown as 2 hours and 30 minutes. The calculation assumes that the entered speed is maintained for the entire route. It does not observe traffic, road closures, acceleration, weather, gradients, rest stops, or loading time.
That simplicity is useful when you need a reproducible baseline rather than a changing navigation estimate. The result includes the original normalized values, decimal hours, total whole minutes, separate hour and minute fields, and a formatted label. Because no departure time is requested, the answer is not a time of day.
Add the returned duration to your chosen departure time separately when an arrival clock is required.
Enter compatible distance and speed values
Distance and speed must use a compatible unit system. Pair kilometres with kilometres per hour, nautical miles with knots, or miles with miles per hour. The arithmetic is unit-agnostic, so the calculator cannot detect a mismatch such as miles divided by kilometres per hour; that combination still produces a number, but it does not describe the journey you intended.
Both fields must be finite and greater than zero. A zero speed cannot produce a finite arrival estimate, while a negative route distance or speed has no useful meaning in this planning model. After division, decimal hours are retained to twelve decimal places for stable automated output.
The human-readable breakdown converts the duration to minutes and rounds to the nearest whole minute. As a result, a very short positive journey may display as zero hours and zero minutes if its exact duration is less than thirty seconds.
Use the result as a transparent planning baseline
Constant-speed duration is most valuable when its assumptions are visible. For a road journey, choose an average speed that accounts for the kind of roads involved rather than entering the highest posted limit. For a vessel, aircraft, bicycle, or walking route, use a sustainable average measured in the same distance units per hour as the route.
The formula and message fields make the result easy to audit without reverse-engineering the response. Treat the output as an estimate, document the assumed speed, and add operational allowances whenever real conditions can change the trip.
What you can do with it
Plan a simple road journey
Convert a known driving distance and a realistic average road speed into a readable travel duration before adding breaks.
Prepare logistics estimates
Produce a reproducible baseline duration for a delivery leg when live routing and traffic information are not required.
Teach distance, speed, and time
Show students the distance-divided-by-speed relationship with both decimal hours and an hours-and-minutes result.
FAQ
What formula does the calculator use?
It uses travel time = distance / speed, then converts the result from decimal hours to the nearest whole minute.
Which units can I use?
Any distance unit works when speed uses that same unit per hour, such as km with km/h or miles with mph.
Does the result include stops or traffic?
No. It assumes constant motion at the entered speed and does not include traffic, stops, acceleration, or other delays.
Does this return an arrival clock time?
No. It returns travel duration in hours and minutes. Add that duration to a departure clock separately if needed.
How is the travel time rounded?
The decimal hours are kept to 12 decimal places, while the hours-and-minutes reading is rounded to the nearest whole minute. A very short trip of under 30 seconds can therefore show as 0 h 0 min.
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/geo/eta-from-speed \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"distance":150,"speed":60}'const res = await fetch("https://api.kit.forhosting.com/geo/eta-from-speed", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"distance": 150,
"speed": 60
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/eta-from-speed",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"distance": 150,
"speed": 60
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/eta-from-speed", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"distance":150,"speed":60}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"distance":150,"speed":60}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/eta-from-speed", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"distance": 150,
"speed": 60
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.eta_from_speed",
"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_distance | 1000000000000 |
max_speed | 1000000000 |
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
Enter compatible distance and speed values
Numeric strings are accepted for API convenience, and the aliases route_distance and constant_speed behave like their canonical fields. Use decimal_hours when downstream work needs more precision, and use hours, minutes, or formatted when presenting a simple estimate to a person.
Use the result as a transparent planning baseline
If breaks are expected, calculate their duration separately and add it to total_minutes; this capability deliberately returns motion time only. Automated callers can use decimal_hours for calculations, total_minutes for schedules, or the separate hours and minutes fields for interfaces. Successful API requests use the published base price of $0.002; invalid inputs are reported as invalid_input rather than returning misleading infinity or negative time. Since the algorithm has no network calls, map provider, current clock, random value, or hidden state, identical inputs always return identical JSON. That makes the calculator suitable for tests, worksheets, quotes, lightweight logistics tools, and comparisons between several candidate speeds.
Technical questions
How much does an API calculation cost?
A successful API request costs $0.002. The same deterministic calculation can run free in the browser.