Heart rate training is one of the most effective ways to measure intensity and track progress towards your fitness goals. Whether you are training for a marathon, trying to lose weight, or improving cardiovascular health, understanding which "zone" you are training in ensures you aren't overtraining or undertraining.
The Karvonen Formula Explained
This calculator uses the Karvonen Formula, widely considered more accurate than the standard "220 minus age" method because it incorporates your Resting Heart Rate (RHR). By factoring in RHR, the formula accounts for your current fitness level.
Max Heart Rate (MHR): The fastest your heart can beat during maximum effort.
Resting Heart Rate (RHR): Your heart rate when completely at rest. A lower RHR typically indicates better cardiovascular fitness.
Heart Rate Reserve (HRR): The difference between your Maximum and Resting Heart Rates. This represents your functional training range.
Understanding the 5 Training Zones
Zone 1: Very Light (50-60%)
Used for warm-ups, cool-downs, and active recovery. Training here helps blood flow and muscle recovery without placing stress on the body. You should be able to hold a conversation effortlessly.
Zone 2: Light / Fat Burning (60-70%)
Often called the "Endurance Zone." This implies a comfortable pace where the body becomes efficient at burning fat as a fuel source. It builds the aerobic base necessary for long-distance events.
Zone 3: Moderate (70-80%)
The aerobic zone improves blood circulation and skeletal muscle efficiency. Training here feels like "work"—breathing is heavier, but you can still speak in short sentences. It effectively improves cardiovascular capacity.
Zone 4: Hard / Threshold (80-90%)
This is high-intensity anaerobic training. You shift from aerobic metabolism to anaerobic, meaning your body produces lactic acid faster than it can clear it. Training here increases your lactate threshold and speed endurance.
Zone 5: Maximum (90-100%)
All-out effort. This zone can only be sustained for very short periods (sprints or intervals). It is used to develop maximum speed and neuromuscular power. Consult a doctor before training at this intensity.
How to Get Accurate Data
To get the best results from this calculator, measure your Resting Heart Rate (RHR) in the morning before getting out of bed. Take the average over 3-5 days. While the formula estimates your Max Heart Rate (MHR) based on age, a professionally administered stress test will provide the most precise MHR data.
function calculateZones() {
// Clear previous errors
var errorDiv = document.getElementById("errorDisplay");
errorDiv.style.display = "none";
errorDiv.innerHTML = "";
// Get inputs
var ageInput = document.getElementById("inputAge").value;
var rhrInput = document.getElementById("inputRHR").value;
var mhrInput = document.getElementById("inputMaxHR").value;
// Validation
if (!ageInput || ageInput 120) {
errorDiv.innerHTML = "Please enter a valid age.";
errorDiv.style.display = "block";
return;
}
if (!rhrInput || rhrInput 200) {
errorDiv.innerHTML = "Please enter a valid Resting Heart Rate (usually between 40-100 bpm).";
errorDiv.style.display = "block";
return;
}
// Parse numbers
var age = parseInt(ageInput);
var rhr = parseInt(rhrInput);
var maxHr;
// Determine Max Heart Rate
if (mhrInput && mhrInput > 0) {
maxHr = parseInt(mhrInput);
} else {
maxHr = 220 – age;
}
// Logic Check: RHR cannot be greater than MHR
if (rhr >= maxHr) {
errorDiv.innerHTML = "Resting Heart Rate cannot be higher than Max Heart Rate.";
errorDiv.style.display = "block";
return;
}
// Calculate Reserve
var hrr = maxHr – rhr;
// Display Summary Stats
document.getElementById("displayMHR").innerText = maxHr;
document.getElementById("displayRHR").innerText = rhr;
document.getElementById("displayHRR").innerText = hrr;
// Helper function for Karvonen formula: Target = (HRR * %) + RHR
function getBpm(percent) {
return Math.round((hrr * percent) + rhr);
}
// Define Zones
var zones = [
{
name: "Zone 1",
cls: "zone-1",
minPct: 0.50,
maxPct: 0.60,
desc: "Warm up / Recovery"
},
{
name: "Zone 2",
cls: "zone-2",
minPct: 0.60,
maxPct: 0.70,
desc: "Fat Burning / Endurance"
},
{
name: "Zone 3",
cls: "zone-3",
minPct: 0.70,
maxPct: 0.80,
desc: "Aerobic Fitness"
},
{
name: "Zone 4",
cls: "zone-4",
minPct: 0.80,
maxPct: 0.90,
desc: "Anaerobic Threshold"
},
{
name: "Zone 5",
cls: "zone-5",
minPct: 0.90,
maxPct: 1.00,
desc: "Maximum Effort"
}
];
// Build Table HTML
var tableHtml = "";
for (var i = 0; i < zones.length; i++) {
var z = zones[i];
var minBpm = getBpm(z.minPct);
var maxBpm = getBpm(z.maxPct);
var pctText = (z.minPct * 100) + "% – " + (z.maxPct * 100) + "%";
tableHtml += "