Entering RHR enables the Karvonen formula for higher accuracy.
Please enter a valid age between 10 and 100.
Estimated Max Heart Rate
— BPM
Zone
Intensity
Heart Rate Range (BPM)
Benefit
Zone 1
50% – 60%
—
Very Light / Recovery
Zone 2
60% – 70%
—
Light / Fat Burn & Endurance
Zone 3
70% – 80%
—
Moderate / Aerobic Fitness
Zone 4
80% – 90%
—
Hard / Anaerobic Capacity
Zone 5
90% – 100%
—
Maximum / VO2 Max
Understanding Your Heart Rate Zones by Age
Training effectively requires monitoring intensity. By calculating your heart rate zones based on your age (and optionally your resting heart rate), you can target specific energy systems to improve endurance, burn fat, or increase speed.
How This Calculator Works
This tool utilizes two primary methods depending on the data you provide:
The Standard Method (Fox Formula): Used if you only provide your age. It estimates your Maximum Heart Rate (MHR) as 220 - Age and calculates zones as a straight percentage of MHR.
The Karvonen Method: Used if you provide your Resting Heart Rate (RHR). This is considered more accurate for individuals with varying fitness levels because it accounts for your Heart Rate Reserve (HRR). The formula is: Target HR = ((MHR - RHR) × %Intensity) + RHR.
Heart Rate Zone Breakdown
Zone 1 (Recovery): Ideal for warming up, cooling down, and active recovery. It helps blood flow and reduces muscle soreness.
Zone 2 (Endurance): The "sweet spot" for building a metabolic base. Your body becomes efficient at burning fat as fuel. You should be able to hold a conversation easily.
Zone 3 (Aerobic): Improves blood circulation and skeletal muscle efficiency. Breathing becomes heavier, but you can still speak in short sentences.
Zone 4 (Anaerobic): Increases your lactate threshold. This is hard effort where your muscles begin to ache. Sustainable for shorter periods.
Zone 5 (VO2 Max): Maximum effort sprinting. Designed to improve speed and neuromuscular power. Only sustainable for very short bursts.
Why Resting Heart Rate Matters?
Your Resting Heart Rate (RHR) is a strong indicator of cardiovascular health. A lower RHR generally indicates a stronger, more efficient heart. Athletes often have RHRs below 60 BPM. By including RHR in the calculation (Karvonen method), your training zones are adjusted to your specific fitness baseline, preventing you from training too easy or too hard.
function calculateHeartZones() {
// 1. Get Inputs
var ageInput = document.getElementById('hr-age').value;
var rhrInput = document.getElementById('hr-rhr').value;
var resultDiv = document.getElementById('hr-results');
var errorDiv = document.getElementById('hr-error');
var methodText = document.getElementById('calc-method-text');
// 2. Parse values
var age = parseFloat(ageInput);
var rhr = rhrInput ? parseFloat(rhrInput) : null;
// 3. Validation
if (isNaN(age) || age 120) {
errorDiv.style.display = 'block';
resultDiv.style.display = 'none';
return;
} else {
errorDiv.style.display = 'none';
}
if (rhr !== null && (rhr 120)) {
alert("Please enter a realistic Resting Heart Rate (30-120 BPM) or leave it blank.");
return;
}
// 4. Calculate Max Heart Rate (Standard Fox Formula)
var maxHR = 220 – age;
// 5. Variables for Zones
var z1min, z1max, z2min, z2max, z3min, z3max, z4min, z4max, z5min, z5max;
// 6. Logic Branch: Standard vs Karvonen
if (rhr !== null && !isNaN(rhr)) {
// KARVONEN FORMULA
// HRR = MaxHR – RHR
// Target = (HRR * %) + RHR
var hrr = maxHR – rhr;
z1min = Math.round((hrr * 0.50) + rhr);
z1max = Math.round((hrr * 0.60) + rhr);
z2min = Math.round((hrr * 0.60) + rhr); // Usually adjacent, taking overlap logic
z2max = Math.round((hrr * 0.70) + rhr);
z3min = Math.round((hrr * 0.70) + rhr);
z3max = Math.round((hrr * 0.80) + rhr);
z4min = Math.round((hrr * 0.80) + rhr);
z4max = Math.round((hrr * 0.90) + rhr);
z5min = Math.round((hrr * 0.90) + rhr);
z5max = maxHR;
methodText.innerHTML = "Calculated using Karvonen Method (Max HR – Resting HR)";
} else {
// STANDARD FORMULA (% of Max HR)
z1min = Math.round(maxHR * 0.50);
z1max = Math.round(maxHR * 0.60);
z2min = Math.round(maxHR * 0.60);
z2max = Math.round(maxHR * 0.70);
z3min = Math.round(maxHR * 0.70);
z3max = Math.round(maxHR * 0.80);
z4min = Math.round(maxHR * 0.80);
z4max = Math.round(maxHR * 0.90);
z5min = Math.round(maxHR * 0.90);
z5max = maxHR;
methodText.innerHTML = "Calculated using Standard Method (% of Max HR)";
}
// 7. Display Results
document.getElementById('result-mhr').innerText = maxHR + " BPM";
document.getElementById('z1-range').innerText = z1min + " – " + z1max;
document.getElementById('z2-range').innerText = z2min + " – " + z2max;
document.getElementById('z3-range').innerText = z3min + " – " + z3max;
document.getElementById('z4-range').innerText = z4min + " – " + z4max;
document.getElementById('z5-range').innerText = z5min + " – " + z5max;
resultDiv.style.display = 'block';
}