Understanding your heart rate zones is crucial for optimizing your workouts, whether your goal is to improve cardiovascular health, burn fat, or increase endurance. Different training intensities correspond to different heart rate percentages, and knowing these zones helps you train smarter and more effectively. The most common method for calculating these zones is based on your maximum heart rate (MHR) and resting heart rate (RHR), often using the Karvonen Formula for a more personalized approach.
Your Heart Rate Training Zones
Maximum Heart Rate (MHR): — bpm
Heart Rate Reserve (HRR): — bpm
Zone 1: Very Light (50-60% of MHR)
Zone 1 Lower: — bpm
Zone 1 Upper: — bpm
Zone 2: Light (60-70% of MHR)
Zone 2 Lower: — bpm
Zone 2 Upper: — bpm
Zone 3: Moderate (70-80% of MHR)
Zone 3 Lower: — bpm
Zone 3 Upper: — bpm
Zone 4: Hard (80-90% of MHR)
Zone 4 Lower: — bpm
Zone 4 Upper: — bpm
Zone 5: Maximum (90-100% of MHR)
Zone 5 Lower: — bpm
Zone 5 Upper: — bpm
function calculateHeartRateZones() {
var age = parseInt(document.getElementById("age").value);
var restingHeartRate = parseInt(document.getElementById("restingHeartRate").value);
var maxHeartRateElement = document.getElementById("maxHeartRate");
var heartRateReserveElement = document.getElementById("heartRateReserve");
var zone1LowerElement = document.getElementById("zone1Lower");
var zone1UpperElement = document.getElementById("zone1Upper");
var zone2LowerElement = document.getElementById("zone2Lower");
var zone2UpperElement = document.getElementById("zone2Upper");
var zone3LowerElement = document.getElementById("zone3Lower");
var zone3UpperElement = document.getElementById("zone3Upper");
var zone4LowerElement = document.getElementById("zone4Lower");
var zone4UpperElement = document.getElementById("zone4Upper");
var zone5LowerElement = document.getElementById("zone5Lower");
var zone5UpperElement = document.getElementById("zone5Upper");
// Basic validation
if (isNaN(age) || isNaN(restingHeartRate) || age <= 0 || restingHeartRate <= 0) {
alert("Please enter valid positive numbers for age and resting heart rate.");
return;
}
// 1. Calculate Maximum Heart Rate (MHR) – Using Tanaka's formula (208 – 0.7 * age)
// Other formulas exist, but Tanaka's is commonly used and simpler.
var maxHeartRate = 208 – (0.7 * age);
maxHeartRate = Math.round(maxHeartRate);
// 2. Calculate Heart Rate Reserve (HRR) – MHR – RHR
var heartRateReserve = maxHeartRate – restingHeartRate;
// Display MHR and HRR
maxHeartRateElement.textContent = maxHeartRate;
heartRateReserveElement.textContent = heartRateReserve;
// Calculate Zone Intensities (using MHR directly for simpler zones, and HRR for Karvonen)
// Method 1: Based on Percentage of MHR (Simpler, less personalized)
var zone1LowerMHR = Math.round(maxHeartRate * 0.50);
var zone1UpperMHR = Math.round(maxHeartRate * 0.60);
var zone2LowerMHR = Math.round(maxHeartRate * 0.60);
var zone2UpperMHR = Math.round(maxHeartRate * 0.70);
var zone3LowerMHR = Math.round(maxHeartRate * 0.70);
var zone3UpperMHR = Math.round(maxHeartRate * 0.80);
var zone4LowerMHR = Math.round(maxHeartRate * 0.80);
var zone4UpperMHR = Math.round(maxHeartRate * 0.90);
var zone5LowerMHR = Math.round(maxHeartRate * 0.90);
var zone5UpperMHR = Math.round(maxHeartRate * 1.00);
// Method 2: Karvonen Formula (More personalized, uses HRR)
// Target Heart Rate = (HRR * % intensity) + RHR
var zone1LowerKarvonen = Math.round((heartRateReserve * 0.50) + restingHeartRate);
var zone1UpperKarvonen = Math.round((heartRateReserve * 0.60) + restingHeartRate);
var zone2LowerKarvonen = Math.round((heartRateReserve * 0.60) + restingHeartRate);
var zone2UpperKarvonen = Math.round((heartRateReserve * 0.70) + restingHeartRate);
var zone3LowerKarvonen = Math.round((heartRateReserve * 0.70) + restingHeartRate);
var zone3UpperKarvonen = Math.round((heartRateReserve * 0.80) + restingHeartRate);
var zone4LowerKarvonen = Math.round((heartRateReserve * 0.80) + restingHeartRate);
var zone4UpperKarvonen = Math.round((heartRateReserve * 0.90) + restingHeartRate);
var zone5LowerKarvonen = Math.round((heartRateReserve * 0.90) + restingHeartRate);
var zone5UpperKarvonen = Math.round((heartRateReserve * 1.00) + restingHeartRate);
// Displaying Karvonen zones as they are generally considered more accurate
zone1LowerElement.textContent = zone1LowerKarvonen;
zone1UpperElement.textContent = zone1UpperKarvonen;
zone2LowerElement.textContent = zone2LowerKarvonen;
zone2UpperElement.textContent = zone2UpperKarvonen;
zone3LowerElement.textContent = zone3LowerKarvonen;
zone3UpperElement.textContent = zone3UpperKarvonen;
zone4LowerElement.textContent = zone4LowerKarvonen;
zone4UpperElement.textContent = zone4UpperKarvonen;
zone5LowerElement.textContent = zone5LowerKarvonen;
zone5UpperElement.textContent = zone5UpperKarvonen;
}