Calculate Lactate Threshold Heart Rate

Lactate Threshold Heart Rate Calculator .lthr-calculator-container { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; background: #fff; border: 1px solid #e0e0e0; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.05); } .lthr-header { text-align: center; margin-bottom: 30px; color: #2c3e50; } .lthr-input-group { margin-bottom: 20px; } .lthr-input-group label { display: block; margin-bottom: 8px; font-weight: 600; color: #34495e; } .lthr-input-group input, .lthr-input-group select { width: 100%; padding: 12px; border: 1px solid #bdc3c7; border-radius: 6px; font-size: 16px; box-sizing: border-box; } .lthr-input-group input:focus { border-color: #3498db; outline: none; } .lthr-btn { width: 100%; padding: 15px; background-color: #e74c3c; color: white; border: none; border-radius: 6px; font-size: 18px; font-weight: bold; cursor: pointer; transition: background-color 0.2s; } .lthr-btn:hover { background-color: #c0392b; } .lthr-results { margin-top: 30px; padding: 20px; background-color: #f8f9fa; border-radius: 8px; display: none; border-left: 5px solid #e74c3c; } .lthr-result-value { font-size: 24px; font-weight: bold; color: #2c3e50; margin-bottom: 20px; text-align: center; } .zone-table { width: 100%; border-collapse: collapse; margin-top: 15px; background: white; } .zone-table th, .zone-table td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; } .zone-table th { background-color: #ecf0f1; color: #2c3e50; } .zone-color { width: 15px; height: 15px; display: inline-block; border-radius: 50%; margin-right: 10px; } .lthr-article { margin-top: 50px; line-height: 1.6; color: #444; } .lthr-article h2 { color: #2c3e50; margin-top: 30px; } .lthr-article h3 { color: #34495e; margin-top: 20px; } .lthr-article ul { margin-left: 20px; } .lthr-article li { margin-bottom: 10px; } .error-msg { color: #c0392b; font-size: 14px; margin-top: 5px; display: none; }

Lactate Threshold Heart Rate Calculator

Determine your training zones based on your field test results.

Please enter a valid heart rate (between 40 and 250 BPM).
Running Cycling
Your Lactate Threshold HR: 0 BPM
Zone Intensity Heart Rate Range (BPM)

Understanding Lactate Threshold Heart Rate (LTHR)

Your Lactate Threshold Heart Rate (LTHR) is arguably the single most important metric for endurance training. Unlike Maximum Heart Rate (Max HR), which is largely genetic and fixed, your LTHR changes based on your fitness level. It represents the intensity at which lactate begins to accumulate in your blood faster than your body can remove it.

Training above this threshold rapidly leads to fatigue, while training below it allows you to sustain effort for longer durations. Knowing your specific LTHR allows you to define accurate training zones so you don't train too hard on easy days or too easy on hard days.

How to Perform the LTHR Field Test

This calculator relies on the standard 30-minute time trial protocol popularized by coach Joe Friel. To get accurate numbers for the calculator above, follow these steps:

  1. Warm-up: 10-15 minutes of easy activity to get blood flowing.
  2. The Time Trial: Run or cycle at your maximum sustainable pace for exactly 30 minutes. This should be a hard, solo effort (like a race).
  3. The Data: At the 10-minute mark of the time trial, hit the "lap" button on your heart rate monitor. You only need the average heart rate for the final 20 minutes of the 30-minute effort.
  4. Calculate: Enter that 20-minute average into the "Average Heart Rate" field above.

Why Running and Cycling Zones Differ

You will notice the calculator asks for your sport. This is critical because LTHR is typically 5-10 beats higher for running than for cycling. Running involves more muscle mass and fights gravity more than cycling, leading to a higher heart rate for the same relative metabolic intensity. If you are a triathlete, you should perform separate tests for running and cycling to establish accurate zones for each discipline.

Interpreting Your Zones

  • Zone 1 (Recovery): Very easy effort. Used for warm-ups, cool-downs, and recovery runs/rides. Promotes blood flow without stress.
  • Zone 2 (Aerobic): The "all-day" pace. This builds mitochondrial density and fat-burning efficiency. Most of your training volume should be here.
  • Zone 3 (Tempo): Comfortably hard. Requires concentration to maintain, but sustainable for 60-90 minutes.
  • Zone 4 (Sub-Threshold): Hard effort just below your LTHR. Increases your ability to tolerate high intensity.
  • Zone 5 (Super-Threshold/Capacity): Above your LTHR. These are short intervals (VO2 Max work) that are very painful and cannot be sustained for long periods.
function calculateZones() { var inputHr = document.getElementById('avgHeartRate').value; var sport = document.getElementById('sportType').value; var resultArea = document.getElementById('resultsArea'); var lthrDisplay = document.getElementById('lthrValue'); var zonesBody = document.getElementById('zonesBody'); var hrError = document.getElementById('hrError'); // Validation var lthr = parseFloat(inputHr); if (isNaN(lthr) || lthr 250) { hrError.style.display = "block"; resultArea.style.display = "none"; return; } else { hrError.style.display = "none"; } // Logic // Based on Joe Friel's Training Bible Zones var zones = []; if (sport === 'running') { // Running Zones // Z1: 106% zones = [ { name: "Zone 1", desc: "Recovery", color: "#2ecc71", low: 0, high: Math.floor(lthr * 0.85) }, { name: "Zone 2", desc: "Aerobic", color: "#3498db", low: Math.ceil(lthr * 0.85), high: Math.floor(lthr * 0.89) }, { name: "Zone 3", desc: "Tempo", color: "#f1c40f", low: Math.ceil(lthr * 0.90), high: Math.floor(lthr * 0.94) }, { name: "Zone 4", desc: "Sub-Threshold", color: "#e67e22", low: Math.ceil(lthr * 0.95), high: Math.floor(lthr * 0.99) }, { name: "Zone 5a", desc: "Super-Threshold", color: "#e74c3c", low: Math.ceil(lthr * 1.00), high: Math.floor(lthr * 1.02) }, { name: "Zone 5b", desc: "Aerobic Capacity", color: "#c0392b", low: Math.ceil(lthr * 1.03), high: Math.floor(lthr * 1.06) }, { name: "Zone 5c", desc: "Anaerobic Capacity", color: "#8e44ad", low: Math.ceil(lthr * 1.07), high: "Max" } ]; } else { // Cycling Zones // Z1: 106% zones = [ { name: "Zone 1", desc: "Recovery", color: "#2ecc71", low: 0, high: Math.floor(lthr * 0.81) }, { name: "Zone 2", desc: "Aerobic", color: "#3498db", low: Math.ceil(lthr * 0.81), high: Math.floor(lthr * 0.89) }, { name: "Zone 3", desc: "Tempo", color: "#f1c40f", low: Math.ceil(lthr * 0.90), high: Math.floor(lthr * 0.93) }, { name: "Zone 4", desc: "Sub-Threshold", color: "#e67e22", low: Math.ceil(lthr * 0.94), high: Math.floor(lthr * 0.99) }, { name: "Zone 5a", desc: "Super-Threshold", color: "#e74c3c", low: Math.ceil(lthr * 1.00), high: Math.floor(lthr * 1.02) }, { name: "Zone 5b", desc: "Aerobic Capacity", color: "#c0392b", low: Math.ceil(lthr * 1.03), high: Math.floor(lthr * 1.06) }, { name: "Zone 5c", desc: "Anaerobic Capacity", color: "#8e44ad", low: Math.ceil(lthr * 1.07), high: "Max" } ]; } // Render Results lthrDisplay.innerHTML = Math.round(lthr); zonesBody.innerHTML = ""; for (var i = 0; i < zones.length; i++) { var z = zones[i]; var rangeText = ""; if (z.low === 0) { rangeText = " " + z.low; } else { rangeText = z.low + " – " + z.high; } var row = "" + "" + z.name + "" + "" + z.desc + "" + "" + rangeText + " bpm" + ""; zonesBody.innerHTML += row; } resultArea.style.display = "block"; }

Leave a Comment