Calculate your max heart rate and training zones based on your age and physiology.
Male
Female
Fox Formula (Standard 220-Age)
Tanaka (Best for Age > 40)
Gulati (Specific for Women)
Gelish (Non-linear)
Estimated Maximum Heart Rate0 BPM
Formula: Fox
Target Heart Rate Training Zones
Zone
Intensity
Range (BPM)
Benefit
Understanding Your Maximum Heart Rate (MHR)
Your Maximum Heart Rate (MHR) is the fastest rate at which your heart can beat per minute. Knowing this number is crucial for athletes and fitness enthusiasts to define training zones, ensuring that workouts are safe and effective. It is important to note that MHR is genetically determined and tends to decrease as you age.
Formulas Explained
This calculator offers several methods to estimate your MHR, as no single formula is perfect for everyone:
Fox Formula (220 – Age): The most widely used and simplest formula. It provides a good general estimate for the average population but can have a margin of error of +/- 10-12 bpm.
Tanaka Formula (208 – 0.7 × Age): Often considered more accurate for adults over the age of 40. It accounts for the fact that the decline in MHR with age is not perfectly linear.
Gulati Formula (206 – 0.88 × Age): Developed specifically for women, as research suggests the standard formulas often overestimate MHR in females.
Gelish Formula (207 – 0.7 × Age): Another non-linear equation that is frequently used in clinical settings and sports medicine.
Heart Rate Training Zones
Once your MHR is established, you can target specific "zones" to achieve different fitness goals:
Zone 1 (50-60%): Very light intensity. Used for warm-ups and recovery. Helps with overall health and metabolism.
Zone 2 (60-70%): Light intensity. Often called the "Fat Burning Zone". Great for endurance base building.
Zone 3 (70-80%): Moderate intensity. Improves aerobic capacity and cardiovascular strength.
Zone 4 (80-90%): Hard intensity. Anaerobic zone. Improves speed endurance and lactic acid tolerance.
Zone 5 (90-100%): Maximum intensity. Only sustainable for very short bursts. Increases maximum sprint speed.
Safety Precaution
These figures are estimates. Actual maximum heart rate can vary significantly between individuals of the same age. Factors such as medication (e.g., beta-blockers), fitness level, and underlying health conditions affect your actual limits. Always consult a physician before starting a vigorous exercise program.
function calculateHeartRate() {
// 1. Get Input Values
var ageInput = document.getElementById('calcAge');
var genderSelect = document.getElementById('calcGender');
var formulaSelect = document.getElementById('calcFormula');
var resultContainer = document.getElementById('resultContainer');
var maxHeartRateResult = document.getElementById('maxHeartRateResult');
var formulaUsedLabel = document.getElementById('formulaUsedLabel');
var zonesTableBody = document.getElementById('zonesTableBody');
var age = parseInt(ageInput.value);
var gender = genderSelect.value;
var formula = formulaSelect.value;
// 2. Validation
if (!age || isNaN(age) || age 120) {
alert("Please enter a valid age between 1 and 120.");
return;
}
// 3. Calculation Logic
var mhr = 0;
var formulaName = "";
if (formula === 'fox') {
mhr = 220 – age;
formulaName = "Fox Formula (220 – Age)";
} else if (formula === 'tanaka') {
mhr = 208 – (0.7 * age);
formulaName = "Tanaka Formula (208 – 0.7 × Age)";
} else if (formula === 'gulati') {
if (gender === 'male') {
// Warn or fallback? Let's fallback to Tanaka for males if Gulati selected, or just calculate straight.
// Standard Gulati is derived for women, but we will calculate the math as requested.
// Ideally, we inform the user.
formulaName = "Gulati Formula (Note: Optimized for Women)";
} else {
formulaName = "Gulati Formula (Women)";
}
mhr = 206 – (0.88 * age);
} else if (formula === 'gelish') {
mhr = 207 – (0.7 * age);
formulaName = "Gelish Formula";
}
// Round MHR to nearest whole number
mhr = Math.round(mhr);
// 4. Update UI Results
maxHeartRateResult.innerHTML = mhr + " BPM";
formulaUsedLabel.innerText = "Based on: " + formulaName;
resultContainer.style.display = "block";
// 5. Generate Zones
var zones = [
{ id: 5, name: "Maximum", min: 0.9, max: 1.0, color: "#d32f2f", desc: "Max Performance / Sprints" },
{ id: 4, name: "Anaerobic", min: 0.8, max: 0.9, color: "#f57c00", desc: "Speed Endurance" },
{ id: 3, name: "Aerobic", min: 0.7, max: 0.8, color: "#fbc02d", desc: "Cardio Fitness" },
{ id: 2, name: "Fat Burn", min: 0.6, max: 0.7, color: "#388e3c", desc: "Basic Endurance" },
{ id: 1, name: "Warm Up", min: 0.5, max: 0.6, color: "#1976d2", desc: "Recovery / Warm up" }
];
var tableHtml = "";
for (var i = 0; i < zones.length; i++) {
var z = zones[i];
var lowerBpm = Math.round(mhr * z.min);
var upperBpm = Math.round(mhr * z.max);
// Adjust upper of previous to prevent overlap gaps conceptually,
// but for display ranges usually look like 100-120, 120-140.
tableHtml += "