Strava Heart Rate Zones Calculator

Strava Heart Rate Zones Calculator

Understanding your heart rate zones is crucial for effective training, whether you're running, cycling, or engaging in any cardiovascular activity. Strava's heart rate zones are designed to help you train at the right intensity for different physiological goals. These zones are typically based on your maximum heart rate (MHR) and resting heart rate (RHR) or sometimes just MHR. This calculator helps you determine your personal heart rate zones according to common Strava methodologies.

function calculateHeartRateZones() { var maxHR = parseFloat(document.getElementById("maxHeartRate").value); var restingHR = parseFloat(document.getElementById("restingHeartRate").value); var resultDiv = document.getElementById("result"); resultDiv.innerHTML = ""; // Clear previous results if (isNaN(maxHR) || isNaN(restingHR) || maxHR <= 0 || restingHR = maxHR) { resultDiv.innerHTML = "Please enter valid numbers for Maximum and Resting Heart Rate. Resting heart rate must be less than maximum heart rate."; return; } // Method 1: Based on Maximum Heart Rate (Simpler, often used by Strava for basic display) var zone1_maxHR = maxHR * 0.50; var zone2_maxHR = maxHR * 0.60; var zone3_maxHR = maxHR * 0.70; var zone4_maxHR = maxHR * 0.80; var zone5_maxHR = maxHR * 0.90; // Method 2: Based on Heart Rate Reserve (HRR) – Karvonen Formula (More personalized) var hrReserve = maxHR – restingHR; var zone1_hrr_low = restingHR + (hrReserve * 0.50); var zone1_hrr_high = restingHR + (hrReserve * 0.60); var zone2_hrr_low = restingHR + (hrReserve * 0.60); var zone2_hrr_high = restingHR + (hrReserve * 0.70); var zone3_hrr_low = restingHR + (hrReserve * 0.70); var zone3_hrr_high = restingHR + (hrReserve * 0.80); var zone4_hrr_low = restingHR + (hrReserve * 0.80); var zone4_hrr_high = restingHR + (hrReserve * 0.90); var zone5_hrr_low = restingHR + (hrReserve * 0.90); var zone5_hrr_high = maxHR; var html = "

Heart Rate Zones

"; html += "

Method 1: Based on Maximum Heart Rate (MHR)

"; html += "Zone 1 (Very Light): " + Math.round(zone1_maxHR) + " – " + Math.round(zone2_maxHR) + " BPM (50-60% of MHR)"; html += "Zone 2 (Light): " + Math.round(zone2_maxHR) + " – " + Math.round(zone3_maxHR) + " BPM (60-70% of MHR)"; html += "Zone 3 (Moderate): " + Math.round(zone3_maxHR) + " – " + Math.round(zone4_maxHR) + " BPM (70-80% of MHR)"; html += "Zone 4 (Hard): " + Math.round(zone4_maxHR) + " – " + Math.round(zone5_maxHR) + " BPM (80-90% of MHR)"; html += "Zone 5 (Maximum): " + Math.round(zone5_maxHR) + " – " + maxHR + " BPM (90-100% of MHR)"; html += ""; html += "

Method 2: Based on Heart Rate Reserve (HRR) – Karvonen Formula

"; html += "Zone 1 (Active Recovery/Very Light): " + Math.round(zone1_hrr_low) + " – " + Math.round(zone1_hrr_high) + " BPM (" + (Math.round(((zone1_hrr_low – restingHR) / hrReserve) * 100)) + "%-" + (Math.round(((zone1_hrr_high – restingHR) / hrReserve) * 100)) + "% of HRR + RHR)"; html += "Zone 2 (Endurance/Light): " + Math.round(zone2_hrr_low) + " – " + Math.round(zone2_hrr_high) + " BPM (" + (Math.round(((zone2_hrr_low – restingHR) / hrReserve) * 100)) + "%-" + (Math.round(((zone2_hrr_high – restingHR) / hrReserve) * 100)) + "% of HRR + RHR)"; html += "Zone 3 (Tempo/Moderate): " + Math.round(zone3_hrr_low) + " – " + Math.round(zone3_hrr_high) + " BPM (" + (Math.round(((zone3_hrr_low – restingHR) / hrReserve) * 100)) + "%-" + (Math.round(((zone3_hrr_high – restingHR) / hrReserve) * 100)) + "% of HRR + RHR)"; html += "Zone 4 (Threshold/Hard): " + Math.round(zone4_hrr_low) + " – " + Math.round(zone4_hrr_high) + " BPM (" + (Math.round(((zone4_hrr_low – restingHR) / hrReserve) * 100)) + "%-" + (Math.round(((zone4_hrr_high – restingHR) / hrReserve) * 100)) + "% of HRR + RHR)"; html += "Zone 5 (Maximum/Very Hard): " + Math.round(zone5_hrr_low) + " – " + Math.round(zone5_hrr_high) + " BPM (" + (Math.round(((zone5_hrr_low – restingHR) / hrReserve) * 100)) + "%-" + (Math.round(((zone5_hrr_high – restingHR) / hrReserve) * 100)) + "% of HRR + RHR)"; resultDiv.innerHTML = html; } .calculator-container { font-family: Arial, sans-serif; max-width: 600px; margin: 20px auto; padding: 20px; border: 1px solid #ccc; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .calculator-container h2 { text-align: center; margin-bottom: 15px; color: #333; } .calculator-container p { line-height: 1.6; color: #555; } .input-section { margin-bottom: 15px; } .input-section label { display: block; margin-bottom: 5px; font-weight: bold; color: #444; } .input-section input[type="number"] { width: calc(100% – 12px); padding: 10px; border: 1px solid #ccc; border-radius: 4px; font-size: 16px; } .calculator-container button { display: block; width: 100%; padding: 12px 20px; background-color: #007bff; color: white; border: none; border-radius: 4px; font-size: 16px; cursor: pointer; transition: background-color 0.3s ease; } .calculator-container button:hover { background-color: #0056b3; } .result-section { margin-top: 25px; padding: 15px; background-color: #f9f9f9; border: 1px solid #eee; border-radius: 4px; } .result-section h3 { margin-top: 0; color: #333; } .result-section h4 { margin-top: 15px; margin-bottom: 10px; color: #555; } .result-section p { margin-bottom: 8px; color: #666; }

Leave a Comment