Heart Rate Zones How to Calculate

Heart Rate Zone Calculator

Optimize your training using the Karvonen Formula

Estimated Max Heart Rate: BPM

Heart Rate Reserve: BPM

Zone Intensity Range (BPM)

How to Calculate Heart Rate Zones

Heart rate zones are ranges of heartbeats per minute (BPM) that correspond to different levels of exercise intensity. Training within specific zones helps you target specific physiological adaptations, such as building aerobic endurance or increasing anaerobic capacity.

The Karvonen Formula Explained

While the simple formula (220 – Age) is common, the Karvonen Formula used in this calculator is more accurate because it accounts for your Resting Heart Rate (RHR). It calculates your Heart Rate Reserve (HRR) to determine your target zones more precisely.

  • Max HR: 220 – Age
  • HR Reserve: Max HR – Resting HR
  • Target HR: (HR Reserve × % Intensity) + Resting HR

The 5 Training Zones

Zone 1: Very Light (50-60%) – Ideal for warm-ups, cool-downs, and active recovery. Improves overall health.
Zone 2: Light (60-70%) – The "fat-burning" zone. Enhances endurance and metabolic efficiency. You should be able to hold a conversation.
Zone 3: Moderate (70-80%) – Improves aerobic capacity and blood circulation. Effective for long-distance training.
Zone 4: Hard (80-90%) – Improves speed and anaerobic capacity. You will breathe heavily and feel muscle fatigue.
Zone 5: Maximum (90-100%) – High-intensity interval training (HIIT). Increases maximum performance and speed. Only sustainable for short bursts.

Realistic Example

If you are 40 years old with a resting heart rate of 60 BPM:

  • Max HR: 220 – 40 = 180 BPM
  • HR Reserve: 180 – 60 = 120 BPM
  • Zone 2 Target (60%): (120 × 0.60) + 60 = 132 BPM
function calculateHRZones() { var age = parseFloat(document.getElementById('userAge').value); var rhr = parseFloat(document.getElementById('userRestingHR').value); var resultsDiv = document.getElementById('hrResultsArea'); var tableBody = document.getElementById('zoneTableBody'); var displayMaxHR = document.getElementById('displayMaxHR'); var displayHRR = document.getElementById('displayHRR'); if (isNaN(age) || age 120) { alert("Please enter a valid age."); return; } if (isNaN(rhr) || rhr 150) { alert("Please enter a valid resting heart rate (typical range is 40-100)."); return; } var maxHR = 220 – age; var hrr = maxHR – rhr; if (hrr <= 0) { alert("Resting heart rate cannot be higher than maximum heart rate."); return; } displayMaxHR.innerText = maxHR; displayHRR.innerText = hrr; var zones = [ { name: "Zone 1 (Very Light)", range: "50% – 60%", low: 0.50, high: 0.60, color: "#e8f5e9" }, { name: "Zone 2 (Light)", range: "60% – 70%", low: 0.60, high: 0.70, color: "#f1f8e9" }, { name: "Zone 3 (Moderate)", range: "70% – 80%", low: 0.70, high: 0.80, color: "#fffde7" }, { name: "Zone 4 (Hard)", range: "80% – 90%", low: 0.80, high: 0.90, color: "#fff3e0" }, { name: "Zone 5 (Max)", range: "90% – 100%", low: 0.90, high: 1.00, color: "#ffebee" } ]; var html = ""; for (var i = 0; i < zones.length; i++) { var lowBPM = Math.round((hrr * zones[i].low) + rhr); var highBPM = Math.round((hrr * zones[i].high) + rhr); html += ""; html += "" + zones[i].name + ""; html += "" + zones[i].range + " Intensity"; html += "" + lowBPM + " – " + highBPM + " BPM"; html += ""; } tableBody.innerHTML = html; resultsDiv.style.display = "block"; // Smooth scroll to results resultsDiv.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }

Leave a Comment