Target Heart Rate Calculator
.thr-calculator-container {
max-width: 800px;
margin: 0 auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
color: #333;
line-height: 1.6;
}
.thr-calculator-box {
background-color: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 8px;
padding: 30px;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
margin-bottom: 40px;
}
.thr-input-group {
margin-bottom: 20px;
}
.thr-input-group label {
display: block;
font-weight: 600;
margin-bottom: 8px;
color: #2d3748;
}
.thr-input-group input, .thr-input-group select {
width: 100%;
padding: 12px;
border: 1px solid #cbd5e0;
border-radius: 6px;
font-size: 16px;
box-sizing: border-box;
}
.thr-input-group small {
display: block;
color: #718096;
margin-top: 5px;
font-size: 0.85em;
}
.thr-btn {
background-color: #e53e3e;
color: white;
border: none;
padding: 15px 30px;
font-size: 18px;
font-weight: bold;
border-radius: 6px;
cursor: pointer;
width: 100%;
transition: background-color 0.2s;
}
.thr-btn:hover {
background-color: #c53030;
}
.thr-result-box {
margin-top: 30px;
padding: 20px;
background-color: #fff;
border: 1px solid #e2e8f0;
border-radius: 6px;
display: none;
}
.thr-zone-table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
.thr-zone-table th, .thr-zone-table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #e2e8f0;
}
.thr-zone-table th {
background-color: #f7fafc;
color: #4a5568;
}
.thr-metric-highlight {
font-size: 1.25em;
font-weight: bold;
color: #e53e3e;
}
.thr-content-section {
margin-top: 50px;
border-top: 2px solid #edf2f7;
padding-top: 30px;
}
.thr-content-section h2 {
color: #2d3748;
margin-top: 30px;
}
.thr-content-section p {
margin-bottom: 15px;
}
.thr-formula-box {
background-color: #ebf8ff;
border-left: 4px solid #4299e1;
padding: 15px;
margin: 20px 0;
font-family: monospace;
}
Target Heart Rate Zone Calculator
Determine your ideal heart rate zones for fat loss, cardiovascular endurance, and peak performance using the Karvonen Formula.
Current Age (years)
Resting Heart Rate (bpm)
Measure your pulse immediately after waking up for the most accurate result. If left blank, we will use the standard formula.
Calculate Heart Rate Zones
How to Calculate Your Target Heart Rate Formula
Understanding how to calculate your target heart rate (THR) is essential for maximizing the efficiency of your workouts. Whether your goal is weight management or marathon training, training in the specific heart rate zones ensures you are stressing your cardiovascular system appropriately without overtraining.
The Formulas: Standard vs. Karvonen
There are two primary methods used to determine target heart rate zones. This calculator prioritizes the Karvonen method when a resting heart rate is provided, as it is generally considered more accurate for individuals with varying fitness levels.
1. Maximum Heart Rate (MHR) Estimation
Before calculating zones, you must estimate your Maximum Heart Rate. The most common formula is:
MHR = 220 – Age
2. The Karvonen Formula (Recommended)
This method factors in your Resting Heart Rate (RHR), creating a "Heart Rate Reserve" (HRR). It tailors the zones to your specific cardiovascular health.
Target Heart Rate = ((MHR – RHR) × Intensity %) + RHR
For example, a 30-year-old with a resting heart rate of 70 bpm aiming for 70% intensity would calculate:
1. MHR: 220 – 30 = 190
2. HRR: 190 – 70 = 120
3. Target: (120 × 0.70) + 70 = 154 bpm
Understanding Heart Rate Zones
Training across different zones provides different physiological benefits:
Zone 1 (50-60%): Warm-up and active recovery. Helps with blood flow and muscle repair.
Zone 2 (60-70%): Fat burning and basic endurance. Ideally where long, slow distance training occurs.
Zone 3 (70-80%): Aerobic fitness. Improves blood circulation and skeletal muscle efficiency.
Zone 4 (80-90%): Anaerobic capacity. Increases maximum performance capacity and lactate threshold.
Zone 5 (90-100%): Maximum effort. Used for short bursts of interval training.
function calculateHeartRateZones() {
// Get Inputs
var ageInput = document.getElementById('thr-age');
var rhrInput = document.getElementById('thr-rhr');
var resultDiv = document.getElementById('thr-results');
var age = parseFloat(ageInput.value);
var rhr = parseFloat(rhrInput.value);
// Validation
if (isNaN(age) || age 120) {
resultDiv.style.display = 'block';
resultDiv.innerHTML = 'Please enter a valid age between 1 and 120.';
return;
}
// Logic
var maxHR = 220 – age;
var useKarvonen = !isNaN(rhr) && rhr > 0 && rhr < maxHR;
var methodUsed = useKarvonen ? "Karvonen Method (More Accurate)" : "Standard Method (220 – Age)";
// Zone Percentages
var zones = [
{ name: "Zone 1: Very Light", min: 0.50, max: 0.60, desc: "Warm up / Recovery" },
{ name: "Zone 2: Light", min: 0.60, max: 0.70, desc: "Fat Burning / Endurance" },
{ name: "Zone 3: Moderate", min: 0.70, max: 0.80, desc: "Aerobic Fitness" },
{ name: "Zone 4: Hard", min: 0.80, max: 0.90, desc: "Anaerobic Threshold" },
{ name: "Zone 5: Maximum", min: 0.90, max: 1.00, desc: "Maximum Performance" }
];
var tableRows = "";
for (var i = 0; i < zones.length; i++) {
var z = zones[i];
var minBPM, maxBPM;
if (useKarvonen) {
// Karvonen: ((MaxHR – RHR) * %) + RHR
var hrr = maxHR – rhr;
minBPM = Math.round((hrr * z.min) + rhr);
maxBPM = Math.round((hrr * z.max) + rhr);
} else {
// Standard: MaxHR * %
minBPM = Math.round(maxHR * z.min);
maxBPM = Math.round(maxHR * z.max);
}
tableRows += "
";
tableRows += "" + z.name + " " + z.desc + " ";
tableRows += "" + Math.round(z.min * 100) + "% – " + Math.round(z.max * 100) + "% ";
tableRows += "" + minBPM + " – " + maxBPM + " bpm ";
tableRows += " ";
}
// Output Construction
var outputHTML = "
Your Heart Rate Profile ";
outputHTML += "
";
outputHTML += "
Estimated Max Heart Rate " + maxHR + " bpm
";
if (useKarvonen) {
outputHTML += "
Resting Heart Rate " + rhr + " bpm
";
}
outputHTML += "
";
outputHTML += "
Calculation Method: " + methodUsed + "";
outputHTML += "
";
outputHTML += "Zone Intensity Target Range ";
outputHTML += "" + tableRows + " ";
outputHTML += "
";
resultDiv.innerHTML = outputHTML;
resultDiv.style.display = 'block';
}