Required for Karvonen formula (more accurate). Measure this in the morning before getting out of bed.
Karvonen Method (Recommended – Uses RHR)
Standard (220 – Age)
Zone
Intensity %
Target Range (BPM)
Feeling
How to Calculate Accurate Heart Rate Zones
Understanding your heart rate zones is essential for targeted training, whether you are looking to burn fat, improve aerobic capacity, or increase your anaerobic threshold. Training blindly without monitoring your intensity often leads to "junk miles"—workouts that are too hard for recovery but too easy to stimulate significant physiological adaptation.
The Formulas: Karvonen vs. Standard
Most basic trackers use the Standard Formula, which simply takes your maximum heart rate (estimated as 220 minus your age) and calculates percentages. While simple, this method assumes everyone of the same age has the same fitness level.
The Karvonen Formula (used in this calculator) is significantly more accurate because it incorporates your Resting Heart Rate (RHR). This accounts for your specific fitness level. As you get fitter, your resting heart rate drops, and your heart rate reserve (the difference between your max and resting heart rate) increases, changing your training zones dynamically.
Understanding the 5 Heart Rate Zones
Zone 1 (50-60% – Very Light): Used for warm-ups, cool-downs, and active recovery. You can maintain a conversation effortlessly.
Zone 2 (60-70% – Light): The "Fat Burning" zone. This builds your aerobic base and endurance. It feels comfortable and sustainable for long durations.
Zone 3 (70-80% – Moderate): Improves aerobic fitness and blood circulation. Breathing becomes heavier, and it's harder to hold a conversation.
Zone 4 (80-90% – Hard): Increases maximum performance capacity. You are operating near your anaerobic threshold. Muscles begin to produce lactic acid faster than it can be removed.
Zone 5 (90-100% – Maximum): For short bursts of speed and power. This zone is sustainable for only very short periods (sprints).
How to Use These Numbers
For general health and weight loss, aim to spend the majority of your exercise time in Zone 2. For performance improvement, interval training that spikes into Zone 4 and 5 followed by recovery in Zone 1 is highly effective. Always consult a physician before starting a new high-intensity training program.
function calculateHeartRateZones() {
// 1. Get input values
var ageInput = document.getElementById("hr-age");
var restInput = document.getElementById("hr-rest");
var formulaSelect = document.getElementById("hr-formula");
var resultArea = document.getElementById("hr-result-area");
var summaryText = document.getElementById("hr-summary-text");
var tableBody = document.getElementById("hr-table-body");
var age = parseInt(ageInput.value);
var rhr = parseInt(restInput.value);
var formula = formulaSelect.value;
// 2. Validation
if (isNaN(age) || age 110) {
alert("Please enter a valid age between 10 and 110.");
return;
}
// Check RHR if Karvonen is selected
if (formula === "karvonen" && (isNaN(rhr) || rhr 200)) {
alert("Please enter a valid Resting Heart Rate (30-200 bpm) for the Karvonen method, or switch to the Standard formula.");
return;
}
// 3. Calculate Max Heart Rate (MHR)
// Standard estimation: 220 – Age
var mhr = 220 – age;
// 4. Define Zones Data Structure
var zones = [
{ id: 1, minPct: 0.50, maxPct: 0.60, name: "Very Light", desc: "Warm Up / Recovery", class: "zone-row-1" },
{ id: 2, minPct: 0.60, maxPct: 0.70, name: "Light", desc: "Fat Burn / Endurance", class: "zone-row-2" },
{ id: 3, minPct: 0.70, maxPct: 0.80, name: "Moderate", desc: "Aerobic Fitness", class: "zone-row-3" },
{ id: 4, minPct: 0.80, maxPct: 0.90, name: "Hard", desc: "Anaerobic Threshold", class: "zone-row-4" },
{ id: 5, minPct: 0.90, maxPct: 1.00, name: "Maximum", desc: "Peak Performance", class: "zone-row-5" }
];
var tableHTML = "";
// 5. Calculation Logic
for (var i = 0; i < zones.length; i++) {
var zone = zones[i];
var minBPM, maxBPM;
if (formula === "karvonen") {
// Target Heart Rate = ((max HR − resting HR) × %Intensity) + resting HR
var hrr = mhr – rhr; // Heart Rate Reserve
minBPM = Math.round((hrr * zone.minPct) + rhr);
maxBPM = Math.round((hrr * zone.maxPct) + rhr);
} else {
// Standard: MHR * %Intensity
minBPM = Math.round(mhr * zone.minPct);
maxBPM = Math.round(mhr * zone.maxPct);
}
tableHTML += '