I have 30-min Time Trial Data (Most Accurate)
Estimate based on Age (Approximation)
Enter the average BPM from the final 20 minutes of a 30-minute all-out effort.
Running
Cycling
Uses the Tanaka formula to estimate Max HR, then approximates Threshold at 90%.
Estimated Anaerobic Threshold (LTHR)
0BPM
Your Heart Rate Training Zones
Based on Joe Friel's Training Zones for running/cycling.
Zone
Intensity
Heart Rate Range
How to Calculate Anaerobic Threshold Heart Rate
Your Anaerobic Threshold (AT), often synonymous with Lactate Threshold (LT) in athletic training contexts, is arguably the most critical metric for endurance athletes. It represents the intensity level at which lactic acid begins to accumulate in the bloodstream faster than your body can flush it out.
Why AT Matters More Than Max HR
While many fitness trackers focus on Maximum Heart Rate, your Anaerobic Threshold is a better predictor of performance. It defines the "red line" of your endurance. Training just below this threshold raises it, allowing you to run or cycle faster for longer periods without fatigue setting in.
Method 1: The 30-Minute Time Trial (Field Test)
The most accessible and accurate way to determine your threshold without a lab coat is the 30-minute Time Trial, popularized by coach Joe Friel. Here is how to perform it:
Warm-up: 10-15 minutes of easy activity followed by a few 30-second bursts of speed.
The Test: Run or cycle for 30 minutes at the maximum sustained effort you can maintain for the full duration. It should be hard, but steady.
The Measurement: Press the "Lap" button on your heart rate monitor 10 minutes into the test. You only want the average heart rate for the last 20 minutes.
The Result: The average heart rate of those final 20 minutes is your estimated Lactate Threshold Heart Rate (LTHR).
Method 2: Age-Based Estimation
If you cannot perform a strenuous field test, you can estimate your threshold using age-based formulas. This calculator uses the Tanaka formula (208 – 0.7 × Age) to estimate Maximum Heart Rate, and then assumes the Anaerobic Threshold falls at approximately 90% of that maximum for trained individuals. Note that this is a generalization and individual physiology varies widely.
Understanding the Training Zones
Once you have your AT/LTHR, you can establish training zones to target specific physiological adaptations:
Zone 1 (Recovery): Very easy effort, promotes blood flow and recovery.
Zone 2 (Aerobic): The "all day" pace. Builds endurance and fat-burning efficiency.
Zone 3 (Tempo): Comfortably hard. Requires focus but isn't an all-out sprint.
Zone 4 (Sub-Threshold): Just below your red line. This is the "sweet spot" for raising your threshold.
Zone 5 (Capacity): Above threshold. Used for interval training to improve VO2 max and anaerobic capacity.
function toggleInputs() {
var method = document.getElementById('calculationMethod').value;
var testInput = document.getElementById('testInput');
var ageInput = document.getElementById('ageInput');
if (method === 'test') {
testInput.classList.remove('hidden');
ageInput.classList.add('hidden');
} else {
testInput.classList.add('hidden');
ageInput.classList.remove('hidden');
}
}
function calculateThreshold() {
var method = document.getElementById('calculationMethod').value;
var lthr = 0;
var msg = "";
if (method === 'test') {
var inputHr = document.getElementById('avgHeartRate').value;
if (!inputHr || inputHr 250) {
alert("Please enter a valid Average Heart Rate (between 30 and 250 BPM).");
return;
}
lthr = parseFloat(inputHr);
msg = "Based on 30-min Time Trial data";
} else {
var age = document.getElementById('age').value;
if (!age || age 100) {
alert("Please enter a valid Age (between 10 and 100).");
return;
}
// Tanaka Formula for Max HR
var maxHr = 208 – (0.7 * parseFloat(age));
// Estimate LTHR at roughly 90% of Max HR for generic fit individuals
// Cycling LTHR is often slightly lower, Running slightly higher relative to max,
// but 90% is a standard population estimate.
lthr = Math.round(maxHr * 0.90);
msg = "Estimated from Age (Tanaka Formula)";
}
lthr = Math.round(lthr);
// Display Result
document.getElementById('lthrResult').innerText = lthr;
document.getElementById('methodUsed').innerText = msg;
document.getElementById('results-area').style.display = 'block';
// Calculate Zones (Joe Friel Running Zones Logic)
// Z1: < 85%
// Z2: 85 – 89%
// Z3: 90 – 94%
// Z4: 95 – 99%
// Z5: 100% + (Specifically 5a, 5b, 5c but simplified here for clarity)
var z1_limit = Math.floor(lthr * 0.85);
var z2_limit = Math.floor(lthr * 0.89);
var z3_limit = Math.floor(lthr * 0.94);
var z4_limit = Math.floor(lthr * 0.99);
var tableHtml = `