Flight Time Calculation Methodology
How Jetfolio Calculates Realistic Flight Times for Part 135 Operations
Overview
Jetfolio's flight planning tools use a sophisticated flight time calculation methodology that goes beyond simple Great Circle distance calculations. Our enhanced algorithm accounts for real-world operational factors that affect actual flight times in Part 135 charter operations.
This methodology provides significantly more accurate flight time estimates compared to basic distance-divided-by-speed calculations, while still running entirely client-side without calling an external flight-planning API.
Calculation Components
Our flight time calculation incorporates six distinct operational factors, each based on industry standards and real-world operational data:
1. Base Great Circle Distance
Method: Haversine Formula
Purpose: Calculate shortest distance between two points on Earth's surface
Unit: Nautical miles (NM)
2. Climb & Descent Time
Range: 15-20 minutes
Basis: Jets climb at 2,500-3,500 fpm to FL410-FL510
Varies by: Flight distance (short/medium/long)
3. ATC Routing Factor
Range: 4-12% distance increase
Reason: Actual routing rarely follows Great Circle due to airways, SIDs, STARs
Varies by: Flight distance (shorter flights = more deviation)
4. Terminal Speed Restrictions
Time: ~4 minutes
Regulation: 14 CFR 91.117 (250 knots below 10,000 feet)
Impact: Reduced speed in terminal areas
5. Prevailing Winds
Effect: ±4% on flights >1,000 NM
Basis: Prevailing westerlies at cruise altitudes (20-40 knots)
Direction: Eastbound faster, westbound slower
6. Taxi Time
Default: 12 minutes (0.2 hours)
Breakdown: 6 minutes departure + 6 minutes arrival
Configurable: Can be adjusted per calculation
Mathematical Formula
The complete flight time calculation follows this sequence:
Step 1: Calculate Great Circle Distance (Haversine Formula)
R = 3440.065 nautical miles (Earth's radius)
dLat = (lat2 - lat1) × π/180
dLon = (lon2 - lon1) × π/180
a = sin²(dLat/2) + cos(lat1) × cos(lat2) × sin²(dLon/2)
c = 2 × atan2(√a, √(1-a))
distance = R × c
Step 2: Calculate Base Cruise Time
baseCruiseTime = distance / cruiseSpeed
Step 3: Add Climb/Descent Time
if distance < 500 NM: climbDescentTime = 0.33 hours (20 min)
if distance < 1000 NM: climbDescentTime = 0.28 hours (17 min)
if distance >= 1000 NM: climbDescentTime = 0.25 hours (15 min)
Step 4: Apply ATC Routing Factor
if distance < 500 NM: routingFactor = 1.12 (12% longer)
if distance < 1000 NM: routingFactor = 1.08 (8% longer)
if distance < 2000 NM: routingFactor = 1.06 (6% longer)
if distance >= 2000 NM: routingFactor = 1.04 (4% longer)
flightTime = (baseCruiseTime + climbDescentTime) × routingFactor
Step 5: Add Terminal Delays
terminalDelay = 4 minutes (0.067 hours)
flightTime = flightTime + terminalDelay
Step 6: Apply Prevailing Wind Factor (if distance > 1000 NM)
if westbound: windFactor = 1.04 (4% slower due to headwinds)
if eastbound: windFactor = 0.96 (4% faster due to tailwinds)
if neither: windFactor = 1.00 (no adjustment)
flightTime = flightTime × windFactor
Step 7: Add Taxi Time
taxiTime = 0.2 hours (12 minutes, default)
totalFlightTime = flightTime + taxiTime
RESULT: totalFlightTime (in hours)
Example Calculation
Route: KTEB (Teterboro, NJ) → KLAX (Los Angeles, CA)
Aircraft: Citation X+ (Cruise Speed: 527 knots)
Simple Calculation (Old Method)
Distance: 2,132.8 NM (Great Circle)
Cruise Speed: 527 knots
Simple Flight Time = 2,132.8 ÷ 527 + 0.2 = 4.25 hours
Enhanced Realistic Calculation (New Method)
Distance: 2,132.8 NM (Great Circle)
Base Cruise Time: 2,132.8 ÷ 527 = 4.05 hours
+ Climb/Descent: 0.25 hours (15 min for long flight)
= 4.30 hours
× ATC Routing Factor: 1.04 (4% for >2000 NM flight)
= 4.47 hours
+ Terminal Delays: 0.067 hours (4 min)
= 4.54 hours
× Wind Factor: 1.04 (westbound headwind penalty)
= 4.72 hours
+ Taxi Time: 0.2 hours (12 min)
= 4.92 hours
Difference: +0.67 hours (40 minutes)
Simple and Enhanced Estimates Compared
Here's how the enhanced calculation compares to the simple method across different flight distances:
| Route Example | Distance | Simple Method | Enhanced Method | Difference |
|---|---|---|---|---|
| KTEB → KBOS (Short) | 164 NM | 0.51 hrs | 0.99 hrs | +0.48 hrs (+94%) |
| KORD → KMIA (Medium) | 1,042 NM | 2.19 hrs | 2.54 hrs | +0.35 hrs (+16%) |
| KJFK → EGLL (Long, Eastbound) | 2,991 NM | 5.90 hrs | 6.20 hrs | +0.30 hrs (+5%) |
| KSFO → PHNL (Long, Westbound) | 2,082 NM | 4.17 hrs | 4.83 hrs | +0.66 hrs (+16%) |
Key Insight: Short flights show the highest percentage difference because climb/descent, routing deviations, and terminal delays represent a larger proportion of total flight time. Long flights show smaller percentage differences but still significant absolute time differences.
Configurable Options
The enhanced flight time calculation includes optional configuration parameters that can be adjusted based on specific operational requirements:
| Option | Default | Purpose |
|---|---|---|
includeClimbDescent |
true | Include/exclude climb and descent time adjustments |
includeATCRouting |
true | Include/exclude ATC routing inefficiency factors |
includeTerminalDelays |
true | Include/exclude terminal area speed restriction delays |
includeWinds |
true | Include/exclude prevailing wind adjustments |
taxiTime |
0.2 hours | Customize total taxi time (departure + arrival) |
By default, all tools use the full enhanced calculation with all factors enabled. Individual tools may expose these options for user customization based on specific operational scenarios.
Tools Using This Methodology
The following tools in Jetfolio use the enhanced flight time calculation:
- Schedule Optimizer - Calculates empty leg times and total fleet hours
- 10 in 24 Calculator - Determines flight times for regulatory compliance
- Flight & Duty Time Tool - Calculates multi-leg flight and duty times
- Empty Leg Profitability - Analyzes repositioning flight costs
- Fatigue Risk Calculator - Evaluates flight duration impacts on fatigue
The flight time arithmetic itself runs client-side in your browser using JavaScript — the calculation makes no external API call. The tools are not offline-capable, however: each one requires a signed-in session validated against Jetfolio's Firebase backend, and the airport database is fetched from the server at page load.
Accuracy and Limitations
Accuracy
This estimate has not yet been compared with flown block times, so no accuracy figure is claimed. It adds climb and descent, routing, terminal-area and seasonal-wind allowances that a plain great-circle estimate leaves out. Check it against your own legs before relying on it for quotes.
Limitations
- Static Wind Model: Uses seasonal average prevailing winds rather than real-time wind data
- No Weather Deviations: Does not account for weather-related routing changes
- Generalized Climb/Descent: Uses average climb rates, not aircraft-specific performance data
- Standard ATC Routing: Assumes typical routing; major airspace restrictions may vary
- No Real-Time Traffic: Does not account for ATC delays or holding patterns
Important: These calculations are designed for planning and analysis purposes. Always verify actual flight times using current weather, NOTAMs, and flight planning tools before operating a flight. This methodology is not a substitute for proper flight planning.
Technical Implementation
The flight time calculation is implemented in the shared utilities library
(js/shared/utils.js) as the function calculateRealisticFlightTime().
Function Signature:
Utils.calculateRealisticFlightTime(depCode, arrCode, cruiseSpeed, options)
Parameters:
- depCode: Departure airport code (ICAO, IATA, or FAA code)
- arrCode: Arrival airport code (ICAO, IATA, or FAA code)
- cruiseSpeed: Aircraft cruise speed in knots
- options: Optional configuration object (see Configurable Options)
Returns:
- Flight time in hours (decimal)
- Returns 0 if airports not found or invalid cruise speed
The function is called by the tools listed above whenever a flight time calculation is needed, keeping
them consistent with one another. The International Ops Planner is the exception — it uses its own copy in
js/modules/intl-ops/route-geo.js, which applies the same adjustments but normalizes the
longitude delta to ±180° so the wind direction stays correct across the antimeridian.