Using a running target heart rate calculator is essential for athletes who want to train scientifically. Instead of just guessing how hard you are working, tracking your beats per minute (BPM) ensures you are hitting the correct physiological adaptations for your specific goals.
What is the Karvonen Formula?
Unlike simple formulas that only use age, this calculator uses the Karvonen Formula. It takes your Resting Heart Rate (RHR) into account to calculate your Heart Rate Reserve (HRR). This provides a much more personalized target zone because it reflects your current level of cardiovascular fitness.
The 5 Training Zones Explained
Zone 1 (50-60%): Very Light. Great for active recovery and warm-ups.
Zone 2 (60-70%): Light. The "fat-burning" zone. Build basic endurance and aerobic capacity.
Zone 3 (70-80%): Moderate. Improves aerobic power and efficiency for long-distance running.
Zone 4 (80-90%): Hard. Increases anaerobic capacity and speed endurance (Tempo runs).
Zone 5 (90-100%): Maximum. Sprinting and high-intensity intervals. Only sustainable for short bursts.
Real-Life Example
Imagine a 40-year-old runner with a resting heart rate of 60 BPM who wants to perform a Zone 2 endurance run (70% intensity):
Max HR: 220 – 40 = 180 BPM
Heart Rate Reserve: 180 – 60 = 120 BPM
Target (70%): (120 * 0.70) + 60 = 144 BPM
This runner should aim to keep their heart rate around 144 BPM to stay within the peak of their aerobic development zone.
function calculateTHR() {
var age = parseFloat(document.getElementById('thr_age').value);
var rhr = parseFloat(document.getElementById('thr_rhr').value);
var intensityInput = parseFloat(document.getElementById('thr_intensity').value);
if (isNaN(age) || isNaN(rhr) || age <= 0 || rhr <= 0) {
alert("Please enter valid numbers for age and resting heart rate.");
return;
}
// Calculations
var mhr = 220 – age;
var hrr = mhr – rhr;
// Specific calculation for the slider value
var specificTarget = Math.round((hrr * (intensityInput / 100)) + rhr);
// Update UI
document.getElementById('thr_result_box').style.display = 'block';
document.getElementById('specific_thr').innerText = specificTarget;
document.getElementById('mhr_val').innerText = mhr;
// Generate Zone Table
var zones = [
{ name: "Zone 1", intensity: "50-60%", low: 0.50, high: 0.60, benefit: "Recovery" },
{ name: "Zone 2", intensity: "60-70%", low: 0.60, high: 0.70, benefit: "Endurance" },
{ name: "Zone 3", intensity: "70-80%", low: 0.70, high: 0.80, benefit: "Aerobic" },
{ name: "Zone 4", intensity: "80-90%", low: 0.80, high: 0.90, benefit: "Anaerobic" },
{ name: "Zone 5", intensity: "90-100%", low: 0.90, high: 1.00, benefit: "Speed" }
];
var html = "";
for (var i = 0; i = zones[i].low * 100 && intensityInput < zones[i].high * 100) || (intensityInput == 100 && i == 4);
var rowStyle = isCurrent ? "background: #fff3f3; font-weight: bold; border-left: 3px solid #e63946;" : "border-bottom: 1px solid #eee;";
html += "