This calculator helps you determine your personalized heart rate training zones, crucial for optimizing your cycling performance and endurance.
Your Heart Rate Training Zones:
Zone 1 (Very Light):
Zone 2 (Light):
Zone 3 (Moderate):
Zone 4 (Hard):
Zone 5 (Maximum):
function calculateHeartRateZones() {
var age = parseInt(document.getElementById("age").value);
var restingHeartRate = parseInt(document.getElementById("restingHeartRate").value);
var resultDiv = document.getElementById("result");
if (isNaN(age) || isNaN(restingHeartRate) || age < 1 || restingHeartRate < 40) {
resultDiv.innerHTML = "
Please enter valid age and resting heart rate.
";
return;
}
// Karvonen Formula for Heart Rate Reserve (HRR)
// HRR = Maximum Heart Rate – Resting Heart Rate
// Target Heart Rate = (HRR * % intensity) + Resting Heart Rate
// Estimate Maximum Heart Rate (MHR) using the Tanaka formula (age-based)
var maxHeartRate = 208 – (0.7 * age);
var heartRateReserve = maxHeartRate – restingHeartRate;
// Calculate Zones based on percentages of HRR and add Resting Heart Rate
var zone1Lower = Math.round(restingHeartRate + (heartRateReserve * 0.50));
var zone1Upper = Math.round(restingHeartRate + (heartRateReserve * 0.60));
var zone2Lower = Math.round(restingHeartRate + (heartRateReserve * 0.60));
var zone2Upper = Math.round(restingHeartRate + (heartRateReserve * 0.70));
var zone3Lower = Math.round(restingHeartRate + (heartRateReserve * 0.70));
var zone3Upper = Math.round(restingHeartRate + (heartRateReserve * 0.80));
var zone4Lower = Math.round(restingHeartRate + (heartRateReserve * 0.80));
var zone4Upper = Math.round(restingHeartRate + (heartRateReserve * 0.90));
var zone5Lower = Math.round(restingHeartRate + (heartRateReserve * 0.90));
var zone5Upper = Math.round(maxHeartRate); // Zone 5 goes up to MHR
document.getElementById("zone1Value").innerHTML = zone1Lower + " – " + zone1Upper + " bpm";
document.getElementById("zone2Value").innerHTML = zone2Lower + " – " + zone2Upper + " bpm";
document.getElementById("zone3Value").innerHTML = zone3Lower + " – " + zone3Upper + " bpm";
document.getElementById("zone4Value").innerHTML = zone4Lower + " – " + zone4Upper + " bpm";
document.getElementById("zone5Value").innerHTML = zone5Lower + " – " + zone5Upper + " bpm";
}