The Hansons Marathon Method is a popular training philosophy that emphasizes cumulative fatigue and specific pace work to prepare runners for the marathon distance. Unlike traditional methods that rely heavily on long runs, Hansons focuses on consistent, moderately long runs and specific workouts designed to simulate race conditions and build endurance without excessive mileage.
Understanding Hansons Paces
The Hansons method prescribes five key training paces, all derived from your goal marathon pace (or in this calculator's case, an equivalent marathon pace based on your recent race performance):
Easy Pace: These runs are for recovery and building aerobic base. They should feel comfortable and conversational. Hansons suggests these are typically 60-90 seconds per mile (37-56 seconds per km) slower than your marathon pace.
Marathon Pace: This is your target marathon race pace. Training at this pace helps your body adapt to the demands of race day.
Tempo Pace: These runs are slightly faster than marathon pace, designed to improve your lactate threshold. They are typically 10-20 seconds per mile (6-12 seconds per km) faster than your marathon pace.
Interval Pace: Shorter, faster efforts with recovery, aimed at improving speed and VO2 max. Hansons often bases these on your 10k race pace equivalent.
Repetition Pace: Very short, very fast efforts with full recovery, focusing on running economy and top-end speed. These are often based on your 1-mile race pace equivalent.
This calculator helps you determine these specific training paces based on a recent race performance, allowing you to tailor your Hansons training plan to your current fitness level.
Calculate Your Hansons Paces
5K
10K
Half Marathon
Marathon
H
M
S
function calculateHansonsPaces() {
var raceDistance = document.getElementById("raceDistance").value;
var raceHours = parseFloat(document.getElementById("raceHours").value);
var raceMinutes = parseFloat(document.getElementById("raceMinutes").value);
var raceSeconds = parseFloat(document.getElementById("raceSeconds").value);
// Input validation
if (isNaN(raceHours) || isNaN(raceMinutes) || isNaN(raceSeconds) ||
raceHours < 0 || raceMinutes < 0 || raceSeconds = 60 || raceSeconds >= 60) {
document.getElementById("hansonsResult").innerHTML = "Please enter valid race time values.";
return;
}
var totalRaceSeconds = (raceHours * 3600) + (raceMinutes * 60) + raceSeconds;
if (totalRaceSeconds <= 0) {
document.getElementById("hansonsResult").innerHTML = "Race time must be greater than zero.";
return;
}
// Define race distances in meters
var distances = {
'5k': 5000,
'10k': 10000,
'halfMarathon': 21097.5,
'marathon': 42195
};
var D1 = distances[raceDistance];
var D_marathon = distances['marathon'];
var D_10k = distances['10k'];
var D_mile = 1609.34; // For repetition pace
// Riegel's formula: T2 = T1 * (D2 / D1)^1.06
var T_marathon_eq = totalRaceSeconds * Math.pow((D_marathon / D1), 1.06);
var T_10k_eq = totalRaceSeconds * Math.pow((D_10k / D1), 1.06);
var T_mile_eq = totalRaceSeconds * Math.pow((D_mile / D1), 1.06);
// Calculate base paces (seconds per km and seconds per mile) from Equivalent Marathon Time
var marathonPaceSecPerKm = T_marathon_eq / (D_marathon / 1000);
var marathonPaceSecPerMile = T_marathon_eq / (D_marathon / D_mile);
// Hansons Pace Differentials (average values used for calculation)
var easyPaceAddSecPerMile = 75; // Average of 60-90 sec/mile
var easyPaceAddSecPerKm = 46.6; // Equivalent of 75 sec/mile
var tempoPaceSubtractSecPerMile = 15; // Average of 10-20 sec/mile
var tempoPaceSubtractSecPerKm = 9.3; // Equivalent of 15 sec/mile
// Calculate Hansons Paces
var easyPaceSecPerMile = marathonPaceSecPerMile + easyPaceAddSecPerMile;
var easyPaceSecPerKm = marathonPaceSecPerKm + easyPaceAddSecPerKm;
var tempoPaceSecPerMile = marathonPaceSecPerMile – tempoPaceSubtractSecPerMile;
var tempoPaceSecPerKm = marathonPaceSecPerKm – tempoPaceSubtractSecPerKm;
// Interval Pace (based on equivalent 10k pace)
var intervalPaceSecPerKm = T_10k_eq / (D_10k / 1000);
var intervalPaceSecPerMile = T_10k_eq / (D_10k / D_mile);
// Repetition Pace (based on equivalent 1-mile pace)
var repetitionPaceSecPerKm = T_mile_eq / (D_mile / 1000);
var repetitionPaceSecPerMile = T_mile_eq / (D_mile / D_mile); // D_mile / D_mile = 1, so T_mile_eq is already sec/mile
// Helper function to format seconds into min:sec
function formatPace(totalSeconds) {
var minutes = Math.floor(totalSeconds / 60);
var seconds = Math.round(totalSeconds % 60);
return minutes + ":" + (seconds < 10 ? "0" : "") + seconds;
}
var resultsHtml = "
Your Estimated Hansons Training Paces:
";
resultsHtml += "Based on your " + raceDistance.toUpperCase() + " time of " + raceHours + "h " + raceMinutes + "m " + raceSeconds + "s, your equivalent marathon pace is approximately " + formatPace(marathonPaceSecPerMile) + "/mile (" + formatPace(marathonPaceSecPerKm) + "/km).";
resultsHtml += "