How to Calculate Heart Rate for Running

Running Heart Rate Zone Calculator

Calculate your optimal training zones using the Karvonen Formula

Your Training Results

Estimated Max Heart Rate: BPM

Heart Rate Reserve (HRR): BPM

Zone Intensity Target HR Range

How to Calculate Heart Rate for Running

Understanding your heart rate zones is critical for endurance athletes. Training at the right intensity ensures you are building aerobic capacity without overtraining. This calculator uses the Karvonen Formula, which is more accurate than simple percentages because it accounts for your resting heart rate.

The Karvonen Formula Explained

The math behind this calculation follows these steps:

  1. Max HR: 220 – Age
  2. Heart Rate Reserve (HRR): Max HR – Resting HR
  3. Target HR: (HRR × Intensity %) + Resting HR

Running Intensity Zones

  • Zone 1 (50-60%): Recovery. Used for warm-ups, cool-downs, and active recovery runs.
  • Zone 2 (60-70%): Aerobic Base. The most important zone for marathon and half-marathon training. Builds endurance.
  • Zone 3 (70-80%): Tempo. Improves aerobic power and moderate-intensity cardiovascular fitness.
  • Zone 4 (80-90%): Threshold. Increases anaerobic capacity and lactate threshold. Very hard effort.
  • Zone 5 (90-100%): VO2 Max. All-out sprints and high-intensity intervals.

Example Calculation

If you are a 30-year-old runner with a resting heart rate of 60 BPM:

  • Max HR = 220 – 30 = 190 BPM
  • HRR = 190 – 60 = 130 BPM
  • Zone 2 Low End (60%) = (130 × 0.60) + 60 = 138 BPM
  • Zone 2 High End (70%) = (130 × 0.70) + 60 = 151 BPM
function calculateRunningZones() { var age = parseFloat(document.getElementById('age').value); var rhr = parseFloat(document.getElementById('rhr').value); if (isNaN(age) || isNaN(rhr) || age <= 0 || rhr <= 0) { alert("Please enter valid numbers for age and resting heart rate."); return; } var maxHR = 220 – age; var hrr = maxHR – rhr; if (hrr <= 0) { alert("Resting heart rate cannot be higher than maximum heart rate. Please check your inputs."); return; } document.getElementById('res-max-hr').innerText = maxHR; document.getElementById('res-hrr').innerText = hrr; var zones = [ { name: "Zone 1", desc: "Recovery/Easy", min: 0.50, max: 0.60, color: "#3498db" }, { name: "Zone 2", desc: "Aerobic Base", min: 0.60, max: 0.70, color: "#2ecc71" }, { name: "Zone 3", desc: "Tempo/Threshold", min: 0.70, max: 0.80, color: "#f1c40f" }, { name: "Zone 4", desc: "Anaerobic", min: 0.80, max: 0.90, color: "#e67e22" }, { name: "Zone 5", desc: "VO2 Max / Sprints", min: 0.90, max: 1.00, color: "#e74c3c" } ]; var html = ""; for (var i = 0; i < zones.length; i++) { var low = Math.round((hrr * zones[i].min) + rhr); var high = Math.round((hrr * zones[i].max) + rhr); html += ""; html += "" + zones[i].name + ""; html += "" + zones[i].desc + " (" + (zones[i].min * 100) + "-" + (zones[i].max * 100) + "%)"; html += "" + low + " – " + high + " BPM"; html += ""; } document.getElementById('zones-body').innerHTML = html; document.getElementById('hr-results').style.display = "block"; // Smooth scroll to results document.getElementById('hr-results').scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment