Fox Formula (Standard: 220 – Age)
Tanaka Formula (208 – 0.7 × Age)
Gellish Formula (206.9 – 0.67 × Age)
Understanding Your Heart Rate Training Zones
Training effectively isn't just about how fast or how far you run; it is about the intensity at which your heart is working. By understanding your Maximum Heart Rate (MHR) and training zones, you can tailor your workouts to burn fat, improve endurance, or increase athletic performance.
Why Calculate Your Zones?
Using a heart rate monitor without knowing your zones is like driving a car without a speedometer. You might be pushing too hard on recovery days or not hard enough on tempo days. This calculator uses established physiological formulas to determine your personal zones based on your age and resting physiology.
The Calculation Methods
1. The Standard (Fox) Formula: The most common method ($220 – Age$). It is simple and widely used for general fitness.
2. The Tanaka Formula: ($208 – 0.7 \times Age$). Often considered more accurate for adults over the age of 40.
3. The Karvonen Method: If you enter your Resting Heart Rate (RHR), our calculator automatically switches to this advanced method. It calculates "Heart Rate Reserve" (HRR), which accounts for your fitness level, providing much more accurate training targets.
Breaking Down the 5 Zones
Zone 1 (Very Light, 50-60%): Used for warm-ups, cool-downs, and active recovery. You should be able to hold a conversation easily.
Zone 2 (Light, 60-70%): The "Fat Burning" zone. Great for building general endurance and burning calories primarily from fat stores.
Zone 3 (Moderate, 70-80%): The aerobic zone. Improves blood circulation and skeletal muscle efficiency. Breathing becomes heavier.
Zone 4 (Hard, 80-90%): The anaerobic threshold. You start producing lactic acid faster than you can clear it. Used for interval training to improve speed.
Zone 5 (Maximum, 90-100%): Red-line effort. Sustainable only for very short bursts (sprints). Improves neuromuscular power.
How to Find Your Resting Heart Rate
For the most accurate results using the Karvonen method, measure your heart rate in the morning right after waking up, before getting out of bed. Count the beats for 60 seconds. Do this for 3 days and take the average.
function calculateHeartZones() {
// 1. Get Input Values
var ageInput = document.getElementById('hr_age');
var rhrInput = document.getElementById('hr_resting');
var formulaInput = document.getElementById('hr_formula');
var resultDiv = document.getElementById('hr_results');
var age = parseFloat(ageInput.value);
var rhr = parseFloat(rhrInput.value);
var formula = formulaInput.value;
// 2. Validation
if (isNaN(age) || age 120) {
alert("Please enter a valid age between 10 and 120.");
return;
}
// 3. Calculate Maximum Heart Rate (MHR)
var mhr = 0;
var formulaName = "";
if (formula === 'tanaka') {
mhr = 208 – (0.7 * age);
formulaName = "Tanaka Formula";
} else if (formula === 'gellish') {
mhr = 206.9 – (0.67 * age);
formulaName = "Gellish Formula";
} else {
mhr = 220 – age;
formulaName = "Fox Formula";
}
mhr = Math.round(mhr);
// 4. Calculate Zones
// Check if we use Karvonen (needs valid RHR)
var useKarvonen = (!isNaN(rhr) && rhr > 20 && rhr < mhr);
var calculationMethod = useKarvonen ? "Karvonen Method (HR Reserve)" : "Standard Percentage Method";
// Zone percentages (Min, Max)
var zones = [
{ name: "Zone 1", label: "Very Light", color: "zone-1", minPct: 0.50, maxPct: 0.60, desc: "Warm up / Recovery" },
{ name: "Zone 2", label: "Light", color: "zone-2", minPct: 0.60, maxPct: 0.70, desc: "Fat Burn / Endurance" },
{ name: "Zone 3", label: "Moderate", color: "zone-3", minPct: 0.70, maxPct: 0.80, desc: "Aerobic Fitness" },
{ name: "Zone 4", label: "Hard", color: "zone-4", minPct: 0.80, maxPct: 0.90, desc: "Anaerobic Threshold" },
{ name: "Zone 5", label: "Maximum", color: "zone-5", minPct: 0.90, maxPct: 1.00, desc: "Peak Performance" }
];
var tableRows = "";
for (var i = 0; i < zones.length; i++) {
var z = zones[i];
var minBpm, maxBpm;
if (useKarvonen) {
// Karvonen: TargetHR = ((MHR − RHR) × %Intensity) + RHR
minBpm = Math.round(((mhr – rhr) * z.minPct) + rhr);
maxBpm = Math.round(((mhr – rhr) * z.maxPct) + rhr);
} else {
// Standard: TargetHR = MHR * %Intensity
minBpm = Math.round(mhr * z.minPct);
maxBpm = Math.round(mhr * z.maxPct);
}
tableRows += '
';
tableRows += '
' + z.name + '' + z.label + '
';
tableRows += '
' + minBpm + ' – ' + maxBpm + ' bpm
';
tableRows += '
' + (z.minPct*100) + '% – ' + (z.maxPct*100) + '%
';
tableRows += '
' + z.desc + '
';
tableRows += '
';
}
// 5. Construct Result HTML
var html = '
';
html += 'Estimated Max Heart Rate: ' + mhr + ' bpm';
if (useKarvonen) {
html += 'Heart Rate Reserve: ' + (mhr – rhr) + ' bpm';
}
html += 'Calculated using: ' + formulaName + ' & ' + calculationMethod + ";
html += '
';
html += '
';
html += '
Zone
Heart Rate Range
Intensity
Benefit
';
html += '' + tableRows + '';
html += '
';
// 6. Output to DOM
resultDiv.innerHTML = html;
resultDiv.style.display = "block";
}