Calculate your target heart rate zones for optimal cardio training.
Enter for Karvonen Method (more accurate)
Fox Formula (220 – Age) – Standard
Tanaka Formula (208 – 0.7 × Age) – Modern
Estimated Maximum Heart Rate
0
Beats Per Minute (BPM)
Zone
Intensity
Target Range (BPM)
Benefit
*Calculations based on Standard logic.
Why Calculate Your Max Heart Rate?
Understanding your Maximum Heart Rate (MHR) is crucial for exercising safely and effectively. It serves as the baseline for determining your heart rate training zones. By training in specific zones, you can tailor your workouts to achieve specific goals, such as burning fat, improving cardiovascular endurance, or increasing peak athletic performance.
The Formulas Explained
Fox Formula (Standard)
The most common and simplest formula, often seen on gym equipment. It is calculated as:
MHR = 220 – Age
Tanaka Formula (Modern)
Published in 2001, this formula is widely considered more accurate for adults over age 40. It accounts for the non-linear decline in heart rate as we age:
MHR = 208 – (0.7 × Age)
Karvonen Method (Heart Rate Reserve)
If you input your Resting Heart Rate (RHR), this calculator automatically switches to the Karvonen method for the training zones. This is highly recommended for athletes because it considers your current fitness level.
Zone 1 (Very Light): 50-60% intensity. Good for warm-ups, cool-downs, and active recovery. Aids in recovery and prepares the body for training.
Zone 2 (Light): 60-70% intensity. The "Fat Burning" zone. You should be able to hold a conversation comfortably. Improves basic endurance and fat metabolism.
Zone 3 (Moderate): 70-80% intensity. The aerobic zone. Improves blood circulation and skeletal muscle efficiency. Breathing becomes heavier.
Zone 4 (Hard): 80-90% intensity. The anaerobic threshold. Improves high-speed endurance and tolerance to lactic acid. Conversation is difficult.
Zone 5 (Maximum): 90-100% intensity. Peak performance training for very short intervals. Improves sprint speed and neuromuscular reaction.
Safety Note: These figures are estimations. Consult a physician before starting any new exercise program, especially if you have a history of heart conditions or high blood pressure.
function calculateHeartRate() {
// 1. Get Inputs
var ageInput = document.getElementById("inputAge").value;
var rhrInput = document.getElementById("inputRestingHR").value;
var formula = document.getElementById("inputFormula").value;
var resultsArea = document.getElementById("resultsArea");
var displayMHR = document.getElementById("displayMHR");
var methodDisplay = document.getElementById("methodUsed");
var tableBody = document.getElementById("zoneTableBody");
// 2. Validation
if (!ageInput || isNaN(ageInput) || ageInput 120) {
alert("Please enter a valid age between 10 and 120.");
return;
}
var age = parseFloat(ageInput);
var rhr = 0;
var useKarvonen = false;
if (rhrInput && !isNaN(rhrInput) && rhrInput > 30 && rhrInput < 200) {
rhr = parseFloat(rhrInput);
useKarvonen = true;
}
// 3. Calculate MHR
var mhr = 0;
if (formula === "tanaka") {
mhr = 208 – (0.7 * age);
} else {
// Fox default
mhr = 220 – age;
}
mhr = Math.round(mhr);
// 4. Calculate Zones
// Zones configuration: [min%, max%, class, label, desc]
var zonesConfig = [
{min: 0.50, max: 0.60, class: "zone-row-1", label: "Zone 1 (Warm Up)", desc: "Recovery & Health"},
{min: 0.60, max: 0.70, class: "zone-row-2", label: "Zone 2 (Fat Burn)", desc: "Basic Endurance"},
{min: 0.70, max: 0.80, class: "zone-row-3", label: "Zone 3 (Aerobic)", desc: "Cardio Fitness"},
{min: 0.80, max: 0.90, class: "zone-row-4", label: "Zone 4 (Anaerobic)", desc: "High Intensity"},
{min: 0.90, max: 1.00, class: "zone-row-5", label: "Zone 5 (VO2 Max)", desc: "Peak Performance"}
];
var tableHTML = "";
for (var i = 0; i < zonesConfig.length; i++) {
var zone = zonesConfig[i];
var minBPM, maxBPM;
if (useKarvonen) {
// Target HR = ((MHR – RHR) * %Intensity) + RHR
var hrr = mhr – rhr;
minBPM = Math.round((hrr * zone.min) + rhr);
maxBPM = Math.round((hrr * zone.max) + rhr);
} else {
// Standard % of MHR
minBPM = Math.round(mhr * zone.min);
maxBPM = Math.round(mhr * zone.max);
}
tableHTML += "