Calculate My Heart Rate Zones for Running

.hr-calculator-wrapper { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; background: #f9f9f9; border: 1px solid #e0e0e0; border-radius: 8px; } .hr-calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 25px; } .hr-input-group { margin-bottom: 15px; } .hr-input-group label { display: block; margin-bottom: 5px; font-weight: 600; color: #333; } .hr-input-group input { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } .hr-input-group .note { font-size: 0.8em; color: #666; margin-top: 3px; display: block; } .hr-btn { grid-column: span 2; background-color: #d32f2f; color: white; padding: 15px; border: none; border-radius: 4px; font-size: 16px; font-weight: bold; cursor: pointer; transition: background-color 0.3s; text-align: center; } .hr-btn:hover { background-color: #b71c1c; } .hr-results { margin-top: 30px; padding: 20px; background: white; border-radius: 4px; border: 1px solid #ddd; display: none; } .hr-results h3 { margin-top: 0; color: #2c3e50; border-bottom: 2px solid #d32f2f; padding-bottom: 10px; } .zone-table { width: 100%; border-collapse: collapse; margin-top: 15px; } .zone-table th, .zone-table td { padding: 12px; text-align: left; border-bottom: 1px solid #eee; } .zone-table th { background-color: #f5f5f5; font-weight: 700; } .zone-color { width: 15px; height: 15px; display: inline-block; border-radius: 50%; margin-right: 8px; } .z1 { background-color: #9e9e9e; } /* Grey – Recovery */ .z2 { background-color: #2196f3; } /* Blue – Aerobic */ .z3 { background-color: #4caf50; } /* Green – Tempo */ .z4 { background-color: #ff9800; } /* Orange – Threshold */ .z5 { background-color: #f44336; } /* Red – Anaerobic */ @media (max-width: 600px) { .hr-calc-grid { grid-template-columns: 1fr; } .hr-btn { grid-column: span 1; } } /* Article Styling */ .hr-content-section { margin-top: 40px; line-height: 1.6; color: #444; } .hr-content-section h2 { color: #333; font-size: 24px; margin-top: 30px; } .hr-content-section h3 { color: #d32f2f; font-size: 20px; margin-top: 20px; } .hr-content-section p { margin-bottom: 15px; } .hr-content-section ul { margin-bottom: 20px; padding-left: 20px; } .hr-content-section li { margin-bottom: 10px; }
Measure in bed before getting up.
Auto-calculated as 220-Age if empty.

Your Personal Running Zones (Karvonen Method)

Based on your Max HR of 0 bpm and Resting HR of 0 bpm.

Zone Intensity Heart Rate Range (BPM) Training Benefit

Master Your Training with Heart Rate Zones

Running based on heart rate is one of the most effective ways to train efficiently, avoid injury, and see consistent progress. Unlike "pace" which can vary based on wind, terrain, or fatigue, your heart rate is an objective measure of how hard your body is working internally.

The Science: Karvonen Formula vs. Standard Formula

Many generic calculators simply take percentages of your Maximum Heart Rate (MHR). However, this calculator uses the Karvonen Formula, also known as the Heart Rate Reserve (HRR) method. This is considered the gold standard for runners because it incorporates your Resting Heart Rate (RHR), tailoring the zones to your specific fitness level.

The formula is: Target HR = ((Max HR − Resting HR) × %Intensity) + Resting HR

Understanding the 5 Running Zones

  • Zone 1 (Recovery): Very light intensity. Used for warm-ups, cool-downs, and active recovery runs. You should be able to hold a full conversation easily.
  • Zone 2 (Aerobic Base): The "bread and butter" of endurance training. This builds mitochondrial density and capillary networks. It feels slow, but it's crucial for marathon training.
  • Zone 3 (Tempo/Aerobic): A "comfortably hard" pace. Often used for tempo runs, improving your body's ability to shuttle lactate and clear waste products efficiently.
  • Zone 4 (Lactate Threshold): Hard running. You are running at or near your lactate threshold. Conversations are limited to single words. Essential for improving speed endurance.
  • Zone 5 (VO2 Max): Maximum effort. Sprints and short intervals. You cannot speak. This improves your top-end speed and neuromuscular power.

How to Get Accurate Inputs

Resting Heart Rate: Measure this first thing in the morning while still lying in bed. Take the average over 3-5 days for the best accuracy.

Max Heart Rate: While the "220 minus Age" formula is a good starting point (and used here if you don't provide a value), a field test or a clinical stress test provides the most accurate data for advanced athletes.

function calculateRunningZones() { // 1. Get input values var ageInput = document.getElementById('runner_age'); var rhrInput = document.getElementById('runner_rhr'); var mhrInput = document.getElementById('runner_mhr'); var resultContainer = document.getElementById('hr_result_container'); var tableBody = document.getElementById('zone_table_body'); var dispMhr = document.getElementById('disp_mhr'); var dispRhr = document.getElementById('disp_rhr'); var age = parseFloat(ageInput.value); var rhr = parseFloat(rhrInput.value); var userMhr = parseFloat(mhrInput.value); // 2. Validation if (isNaN(age) || age 120) { alert("Please enter a valid age."); return; } if (isNaN(rhr) || rhr = 200) { alert("Please enter a valid Resting Heart Rate (typically between 30 and 100)."); return; } // 3. Determine Max Heart Rate (MHR) var maxHeartRate; if (!isNaN(userMhr) && userMhr > 0) { maxHeartRate = userMhr; } else { maxHeartRate = 220 – age; } // Sanity check: MHR must be greater than RHR if (maxHeartRate 60, but standard charts use ranges var z2_max = Math.round((hrr * 0.70) + rhr); // Zone 3: 70% – 80% var z3_min = Math.round((hrr * 0.70) + rhr); var z3_max = Math.round((hrr * 0.80) + rhr); // Zone 4: 80% – 90% var z4_min = Math.round((hrr * 0.80) + rhr); var z4_max = Math.round((hrr * 0.90) + rhr); // Zone 5: 90% – 100% var z5_min = Math.round((hrr * 0.90) + rhr); var z5_max = maxHeartRate; // 6. Update UI dispMhr.innerText = maxHeartRate; dispRhr.innerText = rhr; // Clear previous results tableBody.innerHTML = "; // Helper function to create rows function createRow(zoneClass, zoneName, intensity, range, benefit) { return ` ${zoneName} ${intensity} ${range} bpm ${benefit} `; } var rows = "; rows += createRow('z1', 'Zone 1: Recovery', '50% – 60%', z1_min + ' – ' + z1_max, 'Warm up, Cool down, Active Recovery'); rows += createRow('z2', 'Zone 2: Aerobic', '60% – 70%', (z1_max + 1) + ' – ' + z2_max, 'Fat burning, Endurance base'); rows += createRow('z3', 'Zone 3: Tempo', '70% – 80%', (z2_max + 1) + ' – ' + z3_max, 'Aerobic capacity, Blood circulation'); rows += createRow('z4', 'Zone 4: Threshold', '80% – 90%', (z3_max + 1) + ' – ' + z4_max, 'Speed endurance, Lactate tolerance'); rows += createRow('z5', 'Zone 5: VO2 Max', '90% – 100%', (z4_max + 1) + ' – ' + z5_max, 'Maximum effort, Power, Speed'); tableBody.innerHTML = rows; resultContainer.style.display = 'block'; // Scroll to results resultContainer.scrollIntoView({ behavior: 'smooth' }); }

Leave a Comment