Effective training isn't just about how hard you work; it's about working at the right intensity for your specific goals. Whether you aim to burn fat, build endurance, or improve peak athletic performance, training within specific heart rate zones is crucial. Use the calculator below to determine your personalized target heart rate ranges.
Calculate Your Training Zones
Leave blank for a simple calculation, or enter for greater accuracy using the Karvonen formula.
Understanding Your Heart Rate Zones
Training is generally divided into five distinct zones based on intensity, measured as a percentage of your maximum heart rate. Each zone yields different physiological benefits:
Zone 1: Very Light (50-60%): Used for warm-ups, cool-downs, and active recovery. It helps with blood flow and muscle recovery without straining the body.
Zone 2: Light (60-70%): Often called the "Fat Burning Zone." Training here improves basic endurance and teaches the body to utilize fat as its primary fuel source efficiently. This is an ideal zone for long, steady-state cardio.
Zone 3: Moderate (70-80%): This "Aerobic" zone improves cardiovascular fitness, lung capacity, and overall stamina. It's harder work, where breathing becomes heavier.
Zone 4: Hard (80-90%): The "Anaerobic Threshold" zone. Training here improves your ability to sustain high-intensity efforts and increases lactate tolerance. You will feel a significant "burn" in your muscles.
Zone 5: Maximum (90-100%): Peak performance effort used for very short intervals (sprinting). This zone develops maximum speed and power but can only be sustained for brief periods.
How This Calculator Works
This tool offers two methods of calculation, automatically selecting the most accurate based on the information you provide.
1. The Tanaka Formula for Max HR
First, we estimate your Maximum Heart Rate (MHR). Instead of the outdated "220 minus age" rule, we use the more accurate Tanaka formula: MHR = 208 – (0.7 x Age).
2. The Karvonen Method (Recommended)
If you enter your Resting Heart Rate (RHR), the calculator uses the Karvonen method. This is significantly more accurate because it accounts for your individual fitness level. It calculates your "Heart Rate Reserve" (HRR = Max HR – Resting HR) and applies percentages to that reserve, before adding your resting rate back in.
If you do not enter a resting heart rate, the calculator will use straight percentages of your estimated Maximum Heart Rate. While useful, this method may underestimate training zones for fit individuals with low resting heart rates.
function calculateHRZones() {
// 1. Get inputs
var ageInput = document.getElementById("hrAge");
var restingHRInput = document.getElementById("hrResting");
var resultsDiv = document.getElementById("hrResults");
var age = parseFloat(ageInput.value);
var restingHR = parseFloat(restingHRInput.value);
// 2. Validate inputs
if (isNaN(age) || age 110) {
resultsDiv.style.display = "block";
resultsDiv.innerHTML = "Please enter a valid age between 10 and 110.";
return;
}
// 3. Calculate Max HR (Tanaka Formula: 208 – 0.7 * age)
var maxHR = 208 – (0.7 * age);
// Define Zone Intensities
var intensities = [
{ name: "Zone 1: Very Light (Recovery)", minPct: 0.50, maxPct: 0.60 },
{ name: "Zone 2: Light (Fat Burn/Endurance)", minPct: 0.60, maxPct: 0.70 },
{ name: "Zone 3: Moderate (Aerobic Fitness)", minPct: 0.70, maxPct: 0.80 },
{ name: "Zone 4: Hard (Anaerobic Threshold)", minPct: 0.80, maxPct: 0.90 },
{ name: "Zone 5: Maximum (Peak Performance)", minPct: 0.90, maxPct: 1.00 }
];
var zonesCalculated = [];
var methodUsed = "";
// 4. Determine Calculation Method (Karvonen vs Simple % of Max)
if (!isNaN(restingHR) && restingHR > 25 && restingHR < 180 && restingHR < maxHR) {
// Use Karvonen Method
methodUsed = "Based on the Karvonen Formula (incorporating your resting heart rate for higher accuracy).";
var heartRateReserve = maxHR – restingHR;
for (var i = 0; i < intensities.length; i++) {
var minBpm = Math.round((heartRateReserve * intensities[i].minPct) + restingHR);
var maxBpm = Math.round((heartRateReserve * intensities[i].maxPct) + restingHR);
// Adjust max of Zone 5 to equal Max HR exactly
if (i === intensities.length – 1) { maxBpm = Math.round(maxHR); }
zonesCalculated.push({ name: intensities[i].name, range: minBpm + " – " + maxBpm + " bpm" });
}
} else {
// Use Simple Percentage of Max HR
methodUsed = "Based on a simple percentage of your estimated maximum heart rate (Tanaka formula).";
if (!isNaN(restingHR)) {
methodUsed += " Note: The resting heart rate entered seemed invalid, so the simple method was used.";
}
for (var i = 0; i < intensities.length; i++) {
var minBpm = Math.round(maxHR * intensities[i].minPct);
var maxBpm = Math.round(maxHR * intensities[i].maxPct);
// Adjust max of Zone 5 to equal Max HR exactly
if (i === intensities.length – 1) { maxBpm = Math.round(maxHR); }
zonesCalculated.push({ name: intensities[i].name, range: minBpm + " – " + maxBpm + " bpm" });
}
}
// 5. Generate HTML Output
var outputHTML = "
Estimated Max Heart Rate: " + Math.round(maxHR) + " BPM