Calculate your personalized training zones using the Karvonen Formula.
Your Personalized Training Zones
Based on your Heart Rate Reserve (HRR): BPM
Zone
Intensity
Range (BPM)
Mastering Your Run with Heart Rate Zones
Training by heart rate is one of the most effective ways for runners to ensure they are working at the correct intensity for their specific fitness goals. Instead of guessing based on "perceived exertion," a heart rate zone running calculator uses your physiological data to define exactly how hard your heart should be beating during a recovery run, a tempo run, or an interval session.
The Karvonen Formula Explained
This calculator utilizes the Karvonen Formula. Unlike a simple percentage of max heart rate, the Karvonen method incorporates your Resting Heart Rate (RHR) to determine your Heart Rate Reserve (HRR). This provides a much more accurate representation of your true exertion levels because it accounts for your baseline fitness level.
The formula is: Target HR = ((Max HR − Resting HR) × %Intensity) + Resting HR
Understanding the 5 Running Zones
Zone 1 (50-60% HRR): Very Light. Best for active recovery and warming up. You should be able to hold a full conversation easily.
Zone 2 (60-70% HRR): Light/Endurance. This is the "aerobic base" zone. Most of your weekly mileage should be in this zone to build cardiovascular efficiency and burn fat.
Zone 3 (70-80% HRR): Moderate/Aerobic. This improves your aerobic capacity. It's the "comfortably hard" zone often used for long steady-state runs.
Zone 4 (80-90% HRR): Hard/Threshold. This is your anaerobic threshold. You can only maintain this for 20-60 minutes. It improves your speed endurance.
Zone 5 (90-100% HRR): Maximum Effort. Reserved for short intervals and sprints. It develops peak performance and speed.
Real-World Example
Let's look at a 30-year-old runner with a resting heart rate of 60 BPM:
Max Heart Rate: 220 – 30 = 190 BPM
Heart Rate Reserve: 190 – 60 = 130 BPM
Zone 2 Target (60%): (130 * 0.60) + 60 = 138 BPM
Zone 2 Target (70%): (130 * 0.70) + 60 = 151 BPM
This runner would aim to keep their heart rate between 138 and 151 BPM during their easy endurance runs to maximize the benefits of Zone 2 training.
How to Measure Your Resting Heart Rate
To get the most accurate results from this calculator, measure your RHR first thing in the morning before getting out of bed. Use a smartwatch or manually count your pulse at your wrist (radial artery) for 60 seconds. Repeat this for three mornings and take the average.
function calculateHRZones() {
var ageInput = document.getElementById('hrAge').value;
var rhrInput = document.getElementById('hrRHR').value;
if (ageInput === " || rhrInput === ") {
alert('Please enter both your age and resting heart rate.');
return;
}
var age = parseFloat(ageInput);
var rhr = parseFloat(rhrInput);
if (age <= 0 || rhr <= 0) {
alert('Please enter valid positive numbers.');
return;
}
var maxHR = 220 – age;
var hrr = maxHR – rhr;
if (hrr <= 0) {
alert('Calculated Heart Rate Reserve is too low. Please check your inputs.');
return;
}
document.getElementById('hrrValue').innerText = hrr;
var zones = [
{ name: 'Zone 1 (Recovery)', min: 0.50, max: 0.60, class: 'z1' },
{ name: 'Zone 2 (Endurance)', min: 0.60, max: 0.70, class: 'z2' },
{ name: 'Zone 3 (Aerobic)', min: 0.70, max: 0.80, class: 'z3' },
{ name: 'Zone 4 (Threshold)', min: 0.80, max: 0.90, class: 'z4' },
{ name: 'Zone 5 (Max Effort)', min: 0.90, max: 1.00, class: 'z5' }
];
var tableBody = document.getElementById('hrTableBody');
tableBody.innerHTML = '';
for (var i = 0; i < zones.length; i++) {
var zoneMin = Math.round((hrr * zones[i].min) + rhr);
var zoneMax = Math.round((hrr * zones[i].max) + rhr);
var row = document.createElement('tr');
var cell1 = document.createElement('td');
cell1.innerHTML = '' + zones[i].name;
var cell2 = document.createElement('td');
cell2.innerText = (zones[i].min * 100) + '% – ' + (zones[i].max * 100) + '%';
var cell3 = document.createElement('td');
cell3.innerText = zoneMin + ' – ' + zoneMax + ' BPM';
row.appendChild(cell1);
row.appendChild(cell2);
row.appendChild(cell3);
tableBody.appendChild(row);
}
document.getElementById('hrResults').style.display = 'block';
// Scroll to results on mobile
if (window.innerWidth < 600) {
document.getElementById('hrResults').scrollIntoView({ behavior: 'smooth' });
}
}