Measure when sitting still (optional but recommended)
Your Personalized Results
Estimated Maximum Heart Rate (MHR): — BPM
Exercise Intensity
Target Heart Rate Range
Benefit
Understanding Your Heart Rate Zones
Finding your ideal heart rate for exercise is the key to balancing safety with effectiveness. By monitoring your Beats Per Minute (BPM), you can ensure you are working hard enough to trigger physiological changes without overtaxing your cardiovascular system.
How We Calculate Your Zones
This calculator utilizes the Karvonen Formula, which is widely considered more accurate than simple age-based formulas because it accounts for your Heart Rate Reserve (HRR). By including your resting heart rate, the results are tailored to your current fitness level.
Max Heart Rate: 220 – Age
Heart Rate Reserve: Max HR – Resting HR
Target Zone: (HRR × Intensity%) + Resting HR
The Different Training Zones
Moderate Intensity (50-70%)
Perfect for long-duration activities like brisk walking, cycling on flat terrain, or light jogging. This zone improves basic endurance and fat metabolism.
Vigorous Intensity (70-85%)
This is the aerobic zone for fitness improvement. Use this for running, swimming laps, or HIIT sessions. It strengthens the heart and increases lung capacity.
Example Calculation
Suppose you are 40 years old with a resting heart rate of 70 BPM.
Max Heart Rate = 220 – 40 = 180 BPM.
Heart Rate Reserve = 180 – 70 = 110 BPM.
50% Intensity = (110 * 0.50) + 70 = 125 BPM.
85% Intensity = (110 * 0.85) + 70 = 164 BPM.
Your ideal training range for this example would be between 125 and 164 BPM depending on the goal of the workout.
Note: Certain medications, such as beta-blockers, can lower your heart rate. If you are taking medication or have a heart condition, consult your physician to establish your target zones.
function calculateHeartRate() {
var age = parseFloat(document.getElementById('userAge').value);
var rhr = parseFloat(document.getElementById('restingHR').value);
var resultsDiv = document.getElementById('hrResults');
var mhrDisplay = document.getElementById('mhrDisplay');
var tableBody = document.getElementById('zoneTableBody');
if (isNaN(age) || age 120) {
alert("Please enter a valid age.");
return;
}
// If RHR is not provided, use 0 for the simple calculation or assume a default?
// Better to handle both. If RHR is NaN, we use the simple 220-age formula.
var useKarvonen = !isNaN(rhr) && rhr > 30 && rhr < 120;
var mhr = 220 – age;
mhrDisplay.innerHTML = Math.round(mhr);
var zones = [
{ name: "Very Light (Warm up)", low: 0.50, high: 0.60, benefit: "Recovery & Warm-up", color: "#3498db" },
{ name: "Light (Fat Burn)", low: 0.60, high: 0.70, benefit: "Weight Control & Endurance", color: "#2ecc71" },
{ name: "Moderate (Aerobic)", low: 0.70, high: 0.80, benefit: "Cardiovascular Fitness", color: "#f1c40f" },
{ name: "Hard (Anaerobic)", low: 0.80, high: 0.90, benefit: "Speed & Power", color: "#e67e22" },
{ name: "Maximum (VO2 Max)", low: 0.90, high: 1.00, benefit: "Max Performance", color: "#e74c3c" }
];
var html = "";
for (var i = 0; i < zones.length; i++) {
var z = zones[i];
var lowBpm, highBpm;
if (useKarvonen) {
var hrr = mhr – rhr;
lowBpm = Math.round((hrr * z.low) + rhr);
highBpm = Math.round((hrr * z.high) + rhr);
} else {
lowBpm = Math.round(mhr * z.low);
highBpm = Math.round(mhr * z.high);
}
html += '