How Does Strava Calculate Heart Rate Zones

Strava Heart Rate Zone Calculator

This calculator helps you understand how Strava estimates your heart rate zones, which are crucial for effective training. Strava primarily uses two methods to determine your heart rate zones: maximum heart rate (Max HR) and heart rate reserve (HRR).

function calculateHeartRateZones() { var maxHeartRate = document.getElementById("maxHeartRate").value; var restingHeartRate = document.getElementById("restingHeartRate").value; var resultsDiv = document.getElementById("results"); resultsDiv.innerHTML = "; // Clear previous results if (maxHeartRate === "" || restingHeartRate === "") { resultsDiv.innerHTML = "Please enter both Maximum Heart Rate and Resting Heart Rate."; return; } maxHeartRate = parseFloat(maxHeartRate); restingHeartRate = parseFloat(restingHeartRate); if (isNaN(maxHeartRate) || isNaN(restingHeartRate) || maxHeartRate <= 0 || restingHeartRate = maxHeartRate) { resultsDiv.innerHTML = "Please enter valid numbers. Maximum Heart Rate must be positive, Resting Heart Rate must be non-negative and less than Maximum Heart Rate."; return; } // Strava's Zone Calculation Methods: // Method 1: Based on Maximum Heart Rate (Percentage of Max HR) var zone1MaxHR = maxHeartRate * 0.50; var zone2MaxHR = maxHeartRate * 0.60; var zone3MaxHR = maxHeartRate * 0.70; var zone4MaxHR = maxHeartRate * 0.80; var zone5MaxHR = maxHeartRate * 0.90; // Method 2: Based on Heart Rate Reserve (Percentage of HRR) // HRR = Max HR – Resting HR var heartRateReserve = maxHeartRate – restingHeartRate; var zone1HRR_low = restingHeartRate + (heartRateReserve * 0.50); var zone1HRR_high = restingHeartRate + (heartRateReserve * 0.60); var zone2HRR_low = restingHeartRate + (heartRateReserve * 0.60); var zone2HRR_high = restingHeartRate + (heartRateReserve * 0.70); var zone3HRR_low = restingHeartRate + (heartRateReserve * 0.70); var zone3HRR_high = restingHeartRate + (heartRateReserve * 0.82); var zone4HRR_low = restingHeartRate + (heartRateReserve * 0.82); var zone4HRR_high = restingHeartRate + (heartRateReserve * 0.95); var zone5HRR_low = restingHeartRate + (heartRateReserve * 0.95); var zone5HRR_high = maxHeartRate; var htmlOutput = "

Heart Rate Zones

"; // Max HR Method Output htmlOutput += "

Zones Based on Maximum Heart Rate (% of Max HR)

"; htmlOutput += "
"; htmlOutput += "Zone 1: Very Light (50-60% of Max HR)"; htmlOutput += "" + Math.round(zone1MaxHR) + " – " + Math.round(zone2MaxHR) + " bpm"; htmlOutput += "
"; htmlOutput += "
"; htmlOutput += "Zone 2: Light (60-70% of Max HR)"; htmlOutput += "" + Math.round(zone2MaxHR) + " – " + Math.round(zone3MaxHR) + " bpm"; htmlOutput += "
"; htmlOutput += "
"; htmlOutput += "Zone 3: Moderate (70-80% of Max HR)"; htmlOutput += "" + Math.round(zone3MaxHR) + " – " + Math.round(zone4MaxHR) + " bpm"; htmlOutput += "
"; htmlOutput += "
"; htmlOutput += "Zone 4: Hard (80-90% of Max HR)"; htmlOutput += "" + Math.round(zone4MaxHR) + " – " + Math.round(zone5MaxHR) + " bpm"; htmlOutput += "
"; htmlOutput += "
"; htmlOutput += "Zone 5: Maximum (90-100% of Max HR)"; htmlOutput += "" + Math.round(zone5MaxHR) + " – " + Math.round(maxHeartRate) + " bpm"; htmlOutput += "
"; // HRR Method Output htmlOutput += "

Zones Based on Heart Rate Reserve (% of HRR)

"; htmlOutput += "
"; htmlOutput += "Zone 1: Very Light (50-60% of HRR + Rest)"; htmlOutput += "" + Math.round(zone1HRR_low) + " – " + Math.round(zone1HRR_high) + " bpm"; htmlOutput += "
"; htmlOutput += "
"; htmlOutput += "Zone 2: Light (60-70% of HRR + Rest)"; htmlOutput += "" + Math.round(zone2HRR_low) + " – " + Math.round(zone2HRR_high) + " bpm"; htmlOutput += "
"; htmlOutput += "
"; htmlOutput += "Zone 3: Moderate (70-82% of HRR + Rest)"; htmlOutput += "" + Math.round(zone3HRR_low) + " – " + Math.round(zone3HRR_high) + " bpm"; htmlOutput += "
"; htmlOutput += "
"; htmlOutput += "Zone 4: Hard (82-95% of HRR + Rest)"; htmlOutput += "" + Math.round(zone4HRR_low) + " – " + Math.round(zone4HRR_high) + " bpm"; htmlOutput += "
"; htmlOutput += "
"; htmlOutput += "Zone 5: Maximum (95-100% of HRR + Rest)"; htmlOutput += "" + Math.round(zone5HRR_low) + " – " + Math.round(zone5HRR_high) + " bpm"; htmlOutput += "
"; resultsDiv.innerHTML = htmlOutput; } .strava-heart-rate-zones-calculator { font-family: sans-serif; padding: 20px; border: 1px solid #ccc; border-radius: 8px; max-width: 600px; margin: 20px auto; } .strava-heart-rate-zones-calculator h2, .strava-heart-rate-zones-calculator h3, .strava-heart-rate-zones-calculator h4 { color: #333; margin-bottom: 15px; } .input-section { margin-bottom: 15px; } .input-section label { display: block; margin-bottom: 5px; font-weight: bold; } .input-section input[type="number"] { width: calc(100% – 22px); padding: 10px; border: 1px solid #ccc; border-radius: 4px; font-size: 1em; } button { background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 1em; transition: background-color 0.3s ease; } button:hover { background-color: #0056b3; } .results-section { margin-top: 25px; border-top: 1px solid #eee; padding-top: 20px; } .results-section h3 { margin-bottom: 20px; } .zone-item { background-color: #f9f9f9; border: 1px solid #e0e0e0; padding: 10px; margin-bottom: 10px; border-radius: 5px; } .zone-item strong { color: #555; } .zone-item span { font-weight: bold; color: #007bff; } .error { color: red; font-weight: bold; }

Leave a Comment