Calculate your optimal training zones using the Karvonen Formula
Your Training Results
Estimated Max Heart Rate: BPM
Heart Rate Reserve (HRR): BPM
Zone
Intensity
Target HR Range
How to Calculate Heart Rate for Running
Understanding your heart rate zones is critical for endurance athletes. Training at the right intensity ensures you are building aerobic capacity without overtraining. This calculator uses the Karvonen Formula, which is more accurate than simple percentages because it accounts for your resting heart rate.
The Karvonen Formula Explained
The math behind this calculation follows these steps:
Max HR: 220 – Age
Heart Rate Reserve (HRR): Max HR – Resting HR
Target HR: (HRR × Intensity %) + Resting HR
Running Intensity Zones
Zone 1 (50-60%): Recovery. Used for warm-ups, cool-downs, and active recovery runs.
Zone 2 (60-70%): Aerobic Base. The most important zone for marathon and half-marathon training. Builds endurance.
Zone 3 (70-80%): Tempo. Improves aerobic power and moderate-intensity cardiovascular fitness.
Zone 4 (80-90%): Threshold. Increases anaerobic capacity and lactate threshold. Very hard effort.
Zone 5 (90-100%): VO2 Max. All-out sprints and high-intensity intervals.
Example Calculation
If you are a 30-year-old runner with a resting heart rate of 60 BPM:
Max HR = 220 – 30 = 190 BPM
HRR = 190 – 60 = 130 BPM
Zone 2 Low End (60%) = (130 × 0.60) + 60 = 138 BPM
Zone 2 High End (70%) = (130 × 0.70) + 60 = 151 BPM
function calculateRunningZones() {
var age = parseFloat(document.getElementById('age').value);
var rhr = parseFloat(document.getElementById('rhr').value);
if (isNaN(age) || isNaN(rhr) || age <= 0 || rhr <= 0) {
alert("Please enter valid numbers for age and resting heart rate.");
return;
}
var maxHR = 220 – age;
var hrr = maxHR – rhr;
if (hrr <= 0) {
alert("Resting heart rate cannot be higher than maximum heart rate. Please check your inputs.");
return;
}
document.getElementById('res-max-hr').innerText = maxHR;
document.getElementById('res-hrr').innerText = hrr;
var zones = [
{ name: "Zone 1", desc: "Recovery/Easy", min: 0.50, max: 0.60, color: "#3498db" },
{ name: "Zone 2", desc: "Aerobic Base", min: 0.60, max: 0.70, color: "#2ecc71" },
{ name: "Zone 3", desc: "Tempo/Threshold", min: 0.70, max: 0.80, color: "#f1c40f" },
{ name: "Zone 4", desc: "Anaerobic", min: 0.80, max: 0.90, color: "#e67e22" },
{ name: "Zone 5", desc: "VO2 Max / Sprints", min: 0.90, max: 1.00, color: "#e74c3c" }
];
var html = "";
for (var i = 0; i < zones.length; i++) {
var low = Math.round((hrr * zones[i].min) + rhr);
var high = Math.round((hrr * zones[i].max) + rhr);
html += "