Free Duration Calculator

Add or subtract time durations. Enter hours, minutes, and seconds to get a running total.

Add Duration

Entries

No entries yet. Add a duration above.

Total

00:00:00
0 seconds

How It Works

  1. Enter start and end times: Input two times (hours, minutes, seconds) or select from the time pickers to define the range you want to measure.
  2. Add or subtract durations: Optionally chain multiple time intervals together, add breaks, subtract pauses, or combine multiple segments.
  3. Read the result: The total duration displays in hours, minutes, and seconds. Copy or use the result directly.

Why Use Duration Calculator?

Calculating durations manually is tedious and error-prone, especially across midnight boundaries or when dealing with multiple segments. Whether you're timing a video, calculating billable hours, measuring workout intervals, or working out how long an event lasts, the Duration Calculator handles the math instantly, including edge cases like crossing midnight or summing dozens of intervals.

Features

Frequently Asked Questions

How do I calculate time across midnight?

Enter the start time before midnight and the end time after midnight. The calculator automatically detects the overnight span and returns the correct duration (e.g., 10:00 PM to 6:00 AM = 8 hours).

Can I add multiple time segments together?

Yes. Use the multi-segment mode to add as many time blocks as needed. This is useful for calculating total hours worked across multiple sessions or summing video clip lengths.

What format should I use for time input?

Use the standard HH:MM or HH:MM:SS format. The tool accepts 24-hour time and converts to a readable duration automatically.

The ISO 8601 Duration Format

ISO 8601-1:2019 is the international standard for representing dates, times, and durations. A duration in ISO 8601 looks like P[n]Y[n]M[n]DT[n]H[n]M[n]S: a literal P ("period"), followed by any combination of years / months / days, then a T separator before the time part of hours / minutes / seconds. PT1H30M is a 90-minute coffee break; PT45S is 45 seconds; P3D is 3 days; P1Y2M10DT2H30M is 1 year, 2 months, 10 days, 2 hours, 30 minutes. Weeks have their own designator P1W (mutually exclusive with Y/M/D).

The standard is the canonical wire format for durations in modern systems. PostgreSQL stores durations as the interval type with ISO 8601 input/output. JavaScript's upcoming Temporal proposal (Stage 3 at TC39, on track for ES2025) round-trips ISO 8601 durations via Temporal.Duration. Python's standard datetime.timedelta does not serialise as ISO 8601 by default, the isodate third-party package fills that gap. The time-interval form 2026-05-12T09:00:00/PT1H30M says "starts at 09:00 on May 12, lasts 1h30m" and is what calendar APIs (Google Calendar, iCal, Outlook) ship over the wire.

Why HH:MM:SS Arithmetic Trips People Up

Adding 01:45:30 + 02:30:45 is easy if you convert to total seconds first: 6,330 s + 9,045 s = 15,375 s, which converts back to 04:16:15 (15375 ÷ 3600 = 4 hours; 1575 ÷ 60 = 26 minutes; remainder 15 seconds). Where people slip:

DST and Time-Zone Caveats

If a duration crosses a time-zone boundary or a DST transition, you have to decide whether you want "elapsed wall-clock time" (what a stopwatch would show) or "clock difference" (how the display changed). They diverge during DST. A flight that leaves Boston at 22:00 local on March 9 and lands in San Francisco at 01:30 local on March 10 has been in the air 6h30m elapsed (computed via UTC), but the clock-display difference is only 3h30m because of the timezone shift. The fix is to anchor both timestamps in UTC and subtract those: endUTC.getTime() − startUTC.getTime(). The IANA Time Zone Database (tzdb) is the canonical source for DST rules and ships with every browser and OS. Mexico abolished DST nationwide in October 2022; Brazil abolished it in 2019. The US has the Sunshine Protection Act tabled since 2021 to abolish the twice-yearly switch but it has not passed the House.

Billable Hours, the 0.1-Hour Convention

Law firms, consultancies and freelancers typically bill in tenths of an hour (6-minute increments): a 7-minute task rounds up to 0.2 h billed, a 5-minute one to 0.1 h. The convention traces to late-1950s US BigLaw, when physical timesheets used a "0.1 column" to simplify hand calculation, and it persisted into the digital era because it benefits the firm's revenue capture on short interactions. Some firms use the quarter-hour model (round up to the nearest 15 min). The model affects total billing materially: a 16-minute call billed in tenths is 0.3 h ($90 at $300/hr); in quarters it's 0.25 h ($75); in 30-minute blocks it's 0.5 h ($150). The 30-minute block is the convention in clinical psychotherapy where CPT code 90832 ("16-37 minutes") bills as a "30-minute psychotherapy" line. Exposing both raw HH:MM:SS and decimal-hours-rounded-to-tenths covers 90% of billable-hour use cases.

Video, Audio, and Frame-Accurate Timecode

Cinema and broadcast count time in frames, not seconds, because that's what physical film and digital codecs use as their atomic unit. NTSC television (US, Canada, Japan, parts of South America) runs at 30000/1001 fps ≈ 29.97 fps; its "drop-frame" timecode HH;MM;SS;FF (semicolons) compensates for the 0.1% slowdown by dropping 2 frame numbers per minute except every 10th minute. PAL television (most of Europe, Australia, much of Asia) runs at 25 fps. Cinema is 24 fps standard. Peter Jackson's The Hobbit (2012) was the first major release at 48 fps; Ang Lee's Billy Lynn's Long Halftime Walk (2016) ran at 120 fps. Adobe Premiere, DaVinci Resolve and Final Cut Pro all display timecode in the project's chosen frame rate, and professional duration calculators accept HH:MM:SS:FF input. YouTube player chapters use MM:SS; the export embeds ISO 8601 (PT1M30S).

Famous Durations from Sport and History

The Two-Clocks Problem: Date.now() vs performance.now()

If you compute durations using two different clock sources, you can get nonsense. JavaScript exposes two: Date.now() returns UTC milliseconds since the Unix epoch (1970-01-01T00:00:00Z), but it follows system-clock changes, so if NTP adjusts the system clock during your measurement, you get a wrong duration. performance.now() returns a high-resolution timestamp from page navigation, monotonic and immune to clock changes. For "elapsed real time" use performance.now(); for "wall clock" use Date.now(). The Web Audio API exposes audioContext.currentTime for sample-accurate audio timing, decoupled from both system and performance clocks. setTimeout(fn, 1000) is "no sooner than 1000ms", not "exactly 1000ms"; Chrome throttles background tabs to ≥1000ms minimum interval, the event loop can delay execution, and OS suspension can stretch the gap to many seconds.

Common Use Cases

Common Mistakes

  1. Treating minutes or seconds as base-10. 45 + 20 in minutes is 65, which carries to 1 hour and 5 minutes, not "0:65". Always convert to total seconds, sum, then convert back.
  2. Computing across-midnight durations by simple subtraction. 02:00 − 23:30 as numbers is negative; the right answer (the duration from 23:30 to 02:00 next day) is 2h30m. Add 24h to the end time before subtracting.
  3. Ignoring DST in date-spanning durations. "March 9 at 23:00" + 4 hours in US Pacific = March 10 at 04:00, not 03:00, because 02:00-03:00 doesn't exist. Use UTC arithmetic or a calendar-aware library.
  4. Treating "1 month" as a fixed duration. It's 28 to 31 days depending on the month. For elapsed-time arithmetic always work in seconds or days.
  5. Trusting setTimeout(fn, 1000) to fire after exactly 1000ms. Browsers throttle inactive tabs (Chrome ≥1000ms), the event loop can be busy, and the OS can suspend. For high-resolution timing use performance.now() deltas or requestAnimationFrame.

More Frequently Asked Questions

How do I convert HH:MM:SS to decimal hours for billing?

Divide total seconds by 3,600. 02:45:00 is 9,900 seconds; 9,900 ÷ 3,600 = 2.75 hours. To round to the nearest tenth (the BigLaw 6-minute convention), multiply by 10, round, divide by 10: 2.75 → 27.5 → 28 → 2.8 hours. For quarter-hour rounding, multiply by 4, round up, divide by 4.

Can the result exceed 24 hours?

Yes. A duration is not a clock time; it can be any non-negative number of hours. The tool renders totals as HH:MM:SS with hours ≥ 24 (e.g., 36:30:15 for one and a half days). If you want days/hours separated, divide hours by 24: 36 hours = 1 day 12 hours.

What about negative durations from subtracting more than I added?

The tool displays the result with a leading minus sign (e.g., −00:30:00) when the running total goes below zero. Negative durations make sense in contexts like "this run was 1m12s under last week's pace" or "the project finished 2 days ahead of schedule".

Does the tool handle frame-accurate video timecode?

The current version uses HH:MM:SS to second precision. Frame-accurate timecode (HH:MM:SS:FF at 24, 25, or 29.97 fps) is not yet supported. For frame-level work the canonical tools are Adobe Premiere's timecode panel, DaVinci Resolve, and Avid Media Composer, all of which sum drop-frame timecode correctly.

Are my inputs sent anywhere?

No. The calculator runs entirely in your browser. The hours, minutes, and seconds you type are summed in JavaScript and the result is rendered into the DOM. No fetch calls, no analytics, no logging. Safe for entering personally-sensitive durations like medical-appointment lengths, billable client time, or private activity logs.

Related Tools

Countdown Timer Timestamp Converter Pomodoro Timer Date Calculator