Calculate Maximum Heart Rate (MHR) and Target Training Zones
Leave blank for standard formula, fill for higher accuracy.
Maximum Heart Rate (MHR)
— BPM
Target Heart Rate
— BPM
Your Training Zones
Zone
Intensity
Heart Rate Range (BPM)
Benefit
How is Heart Rate Calculated?
Calculating your heart rate targets is essential for optimizing cardiovascular workouts and ensuring safety during exercise. While simply checking your pulse tells you your current beats per minute (BPM), understanding how heart rate is calculated involves determining your Maximum Heart Rate (MHR) and defining specific training zones based on your fitness goals.
1. The Maximum Heart Rate (MHR) Formula
The foundational step in most heart rate calculations is estimating the maximum number of times your heart can beat in one minute safely. The most widely used formula, proposed by Fox and Haskell, is simple:
MHR = 220 – Age
For example, if you are 40 years old, your estimated MHR is calculated as 220 – 40 = 180 BPM. While this provides a good baseline for the general population, it does not account for individual fitness levels.
2. The Karvonen Method (Heart Rate Reserve)
For a more personalized calculation, fitness professionals often use the Karvonen Formula. This method incorporates your Resting Heart Rate (RHR), which is a strong indicator of cardiovascular health. A lower RHR typically indicates better fitness.
The Karvonen formula calculates your Heart Rate Reserve (HRR) first:
This method is superior because it scales the intensity based on your actual heart rate range (the difference between your resting and maximum), rather than just a percentage of the maximum.
3. Understanding Heart Rate Zones
Once your MHR or HRR is established, you can calculate training zones to target specific physiological adaptations:
Zone 1 (50-60%): Very Light. Used for warm-ups and recovery.
Zone 2 (60-70%): Light. The "Fat Burning" zone; builds endurance and burns fat stores.
Zone 3 (70-80%): Moderate. Improves aerobic capacity and blood circulation.
Zone 4 (80-90%): Hard. Increases maximum performance capacity and lactate threshold.
Zone 5 (90-100%): Maximum. Develops maximum speed and power (short bursts only).
Why Monitor Your Heart Rate?
Monitoring your heart rate prevents overtraining and ensures you aren't undertraining. If your goal is weight loss, staying in Zone 2 is often more effective than pushing into Zone 4 where the body switches to burning carbohydrates. Conversely, athletes seeking performance gains must spend time in Zone 4 and 5. Using a calculator allows you to define these boundaries precisely.
function calculateHeartRate() {
// 1. Get Inputs
var ageInput = document.getElementById('hr_age');
var rhrInput = document.getElementById('hr_rhr');
var intensityInput = document.getElementById('hr_intensity');
var age = parseFloat(ageInput.value);
var rhr = parseFloat(rhrInput.value);
var intensity = parseFloat(intensityInput.value);
// 2. Validation
if (isNaN(age) || age <= 0) {
alert("Please enter a valid age.");
return;
}
if (isNaN(intensity) || intensity 100) {
intensity = 70; // Default if invalid
}
// 3. Calculation Logic
var mhr = 220 – age;
var method = "Standard Formula (220 – Age)";
var targetHR = 0;
var zones = [];
// Check if RHR is provided for Karvonen Method
var useKarvonen = !isNaN(rhr) && rhr > 0;
if (useKarvonen) {
// Karvonen Method: Target = ((MHR – RHR) * %Intensity) + RHR
var hrr = mhr – rhr; // Heart Rate Reserve
targetHR = Math.round((hrr * (intensity / 100)) + rhr);
method = "Karvonen Method (incorporating Resting HR)";
// Calculate Zones based on Karvonen
zones = [
{ name: "Zone 1 (Recovery)", pct: "50-60%", min: Math.round((hrr * 0.50) + rhr), max: Math.round((hrr * 0.60) + rhr), desc: "Warm up / Recovery" },
{ name: "Zone 2 (Fat Burn)", pct: "60-70%", min: Math.round((hrr * 0.60) + rhr), max: Math.round((hrr * 0.70) + rhr), desc: "Fat Burning / Endurance" },
{ name: "Zone 3 (Aerobic)", pct: "70-80%", min: Math.round((hrr * 0.70) + rhr), max: Math.round((hrr * 0.80) + rhr), desc: "Cardio Fitness" },
{ name: "Zone 4 (Anaerobic)", pct: "80-90%", min: Math.round((hrr * 0.80) + rhr), max: Math.round((hrr * 0.90) + rhr), desc: "High Performance" },
{ name: "Zone 5 (Maximum)", pct: "90-100%", min: Math.round((hrr * 0.90) + rhr), max: mhr, desc: "Max Effort" }
];
} else {
// Standard Method: Target = MHR * %Intensity
targetHR = Math.round(mhr * (intensity / 100));
// Calculate Zones based on Standard
zones = [
{ name: "Zone 1 (Recovery)", pct: "50-60%", min: Math.round(mhr * 0.50), max: Math.round(mhr * 0.60), desc: "Warm up / Recovery" },
{ name: "Zone 2 (Fat Burn)", pct: "60-70%", min: Math.round(mhr * 0.60), max: Math.round(mhr * 0.70), desc: "Fat Burning / Endurance" },
{ name: "Zone 3 (Aerobic)", pct: "70-80%", min: Math.round(mhr * 0.70), max: Math.round(mhr * 0.80), desc: "Cardio Fitness" },
{ name: "Zone 4 (Anaerobic)", pct: "80-90%", min: Math.round(mhr * 0.80), max: Math.round(mhr * 0.90), desc: "High Performance" },
{ name: "Zone 5 (Maximum)", pct: "90-100%", min: Math.round(mhr * 0.90), max: mhr, desc: "Max Effort" }
];
}
// 4. Output Results
document.getElementById('res_mhr').innerHTML = mhr + " BPM";
document.getElementById('res_target').innerHTML = targetHR + " BPM";
document.getElementById('method_used').innerText = "Calculation based on: " + method;
// Build Table
var tableHtml = "";
for (var i = 0; i < zones.length; i++) {
tableHtml += "
";
tableHtml += "
" + zones[i].name + "
";
tableHtml += "
" + zones[i].pct + "
";
tableHtml += "
" + zones[i].min + " – " + zones[i].max + " BPM
";
tableHtml += "
" + zones[i].desc + "
";
tableHtml += "
";
}
document.getElementById('hr_zone_body').innerHTML = tableHtml;
// Show Results Area
document.getElementById('hr_results').style.display = "block";
}