Growing Degree Day Calculator
About this app
Growing Degree Day Calculator Growing Degree Day Calculator One day of heat units from Tmax, Tmin, and crop base. Not a season log of another index. Units °F °C Crop presetSets Tbase and Tcap. You can edit the boxes after. Custom Corn (Tbase 50 °F / 10 °C, cap 86 °F / 30 °C) Soybean (Tbase 50 °F / 10 °C, no cap) Wheat (Tbase 32 °F / 0 °C, no cap) Alfalfa (Tbase 41 °F / 5 °C, no cap) Daily maximum temperature Daily minimum temperature Base temperature Tbase Upper cap TcapBlank = no cap. Corn commonly caps Tmax at 86 °F (30 °C). Calculate GDD Formula Tmax_used = min(Tmax, Tcap) if a cap is set Tavg = (Tmax_used + Tmin) / 2 GDD = max(0, Tavg − Tbase) This is the simple average method used by many US extension services for corn (50/86 °F). It is not the Baskerville–Emin sine method. GDD in °F is not the same number as GDD in °C (factor 5/9). References Nielsen RL. Heat unit accumulation and corn development. Purdue University Extension. Corn 50 °F base, 86 °F cap. USDA / NASS and land-grant extension GDD documentation. Simple daily average with crop-specific Tbase. Field planning aid only. Confirm rates with your agronomist, label, and local extension. Not a pesticide or fertilizer...
Related apps
Put this on your site
Source
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<title>Growing Degree Day Calculator</title>
<meta name="description" content="Free growing degree day calculator. Daily GDD with crop base temperature and optional cap.">
<meta name="keywords" content="growing degree day, GDD calculator, corn GDD, Tbase, heat units, agronomy, crop development">
<style>
:root { --text:#1a1a1a; --muted:#4a4a4a; --line:#d6d6d6; --bg:#fff; --panel:#f6f6f6; }
html { -webkit-text-size-adjust:100%; text-size-adjust:100%; }
* { box-sizing:border-box; }
body {
margin:0;
font:16px/1.45 system-ui,-apple-system,sans-serif;
color:var(--text);
background:var(--bg);
overflow-x:hidden;
}
main {
max-width:720px;
margin:0 auto;
padding:24px 16px 48px;
padding-left:max(16px, env(safe-area-inset-left));
padding-right:max(16px, env(safe-area-inset-right));
}
html.in-viewer main {
padding-top:calc(4.25rem + env(safe-area-inset-top, 0px));
padding-right:calc(4.75rem + env(safe-area-inset-right, 0px));
padding-bottom:calc(6.5rem + env(safe-area-inset-bottom, 0px));
}
h1 { font-size:1.35rem; margin:0 0 0.35rem; }
h2 { font-size:1.05rem; margin:1.75rem 0 0.5rem; }
p, li { color:var(--text); }
.lede, .note, .disclaimer, label span { color:var(--muted); }
.lede, .disclaimer { font-size:0.95rem; }
label span { font-weight:400; font-size:0.85rem; }
form, .stack { display:grid; gap:14px; margin:1.25rem 0; }
fieldset {
border:1px solid var(--line);
border-radius:6px;
padding:12px;
display:grid;
gap:12px;
min-width:0;
}
legend { font-weight:600; padding:0 6px; }
label { display:grid; gap:4px; font-weight:600; }
.check { display:flex; align-items:center; gap:10px; font-weight:600; }
.check input { width:22px; height:22px; min-height:22px; flex:0 0 auto; }
input, select, textarea {
font:inherit;
font-size:16px;
min-height:44px;
padding:10px 12px;
border:1px solid var(--line);
border-radius:6px;
width:100%;
max-width:100%;
background:#fff;
}
button {
font:inherit;
font-size:16px;
font-weight:600;
width:100%;
min-height:48px;
padding:12px 14px;
border:0;
border-radius:6px;
background:#1a1a1a;
color:#fff;
cursor:pointer;
}
.result {
padding:16px;
background:var(--panel);
border:1px solid var(--line);
border-radius:6px;
}
.result strong { font-size:1.35rem; }
.parts { display:grid; gap:6px; margin-top:10px; font-size:0.95rem; }
pre.formula {
white-space:pre-wrap;
overflow-wrap:anywhere;
background:var(--panel);
border:1px solid var(--line);
border-radius:6px;
padding:12px;
font-size:0.9rem;
max-width:100%;
}
ol.refs { padding-left:1.25rem; }
ol.refs li { margin-bottom:0.6rem; }
a { color:inherit; }
.table-wrap { overflow-x:auto; -webkit-overflow-scrolling:touch; max-width:100%; }
table { border-collapse:collapse; width:100%; font-size:0.9rem; }
th, td { border:1px solid var(--line); padding:8px; text-align:left; vertical-align:top; }
.muted { color:var(--muted); font-size:0.9rem; }
</style>
</head>
<body>
<main>
<h1>Growing Degree Day Calculator</h1>
<p class="lede">One day of heat units from Tmax, Tmin, and crop base. Not a season log of another index.</p>
<form id="calc-form">
<label>Units<span></span>
<select id="units">
<option value="f" selected>°F</option>
<option value="c">°C</option>
</select>
</label>
<label>Crop preset<span>Sets Tbase and Tcap. You can edit the boxes after.</span>
<select id="crop">
<option value="custom">Custom</option>
<option value="corn" selected>Corn (Tbase 50 °F / 10 °C, cap 86 °F / 30 °C)</option>
<option value="soy">Soybean (Tbase 50 °F / 10 °C, no cap)</option>
<option value="wheat">Wheat (Tbase 32 °F / 0 °C, no cap)</option>
<option value="alfalfa">Alfalfa (Tbase 41 °F / 5 °C, no cap)</option>
</select>
</label>
<label>Daily maximum temperature<span></span>
<input id="tmax" type="number" step="any" inputmode="decimal" value="86">
</label>
<label>Daily minimum temperature<span></span>
<input id="tmin" type="number" step="any" inputmode="decimal" value="64">
</label>
<label>Base temperature Tbase<span></span>
<input id="tbase" type="number" step="any" inputmode="decimal" value="50">
</label>
<label>Upper cap Tcap<span>Blank = no cap. Corn commonly caps Tmax at 86 °F (30 °C).</span>
<input id="tcap" type="number" step="any" inputmode="decimal" value="86">
</label>
<button type="submit">Calculate GDD</button>
</form>
<div class="result" id="result" hidden></div>
<h2>Formula</h2>
<pre class="formula">Tmax_used = min(Tmax, Tcap) if a cap is set
Tavg = (Tmax_used + Tmin) / 2
GDD = max(0, Tavg − Tbase)
This is the simple average method used by many US extension services
for corn (50/86 °F). It is not the Baskerville–Emin sine method.
GDD in °F is not the same number as GDD in °C (factor 5/9).</pre>
<h2>References</h2>
<ol class="refs">
<li>Nielsen RL. Heat unit accumulation and corn development. Purdue University Extension. Corn 50 °F base, 86 °F cap.</li>
<li>USDA / NASS and land-grant extension GDD documentation. Simple daily average with crop-specific Tbase.</li>
</ol>
<p class="disclaimer">Field planning aid only. Confirm rates with your agronomist, label, and local extension. Not a pesticide or fertilizer recommendation.</p>
</main>
<script>
if (window.self !== window.top) {
document.documentElement.classList.add('in-viewer');
}
function num(id) {
var el = document.getElementById(id);
if (!el) return 0;
var value = parseFloat(el.value);
return isFinite(value) && value > 0 ? value : 0;
}
function raw(id) {
var el = document.getElementById(id);
if (!el) return NaN;
var value = parseFloat(el.value);
return isFinite(value) ? value : NaN;
}
function sel(id) {
var el = document.getElementById(id);
return el ? el.value : '';
}
function showResult(html) {
var el = document.getElementById('result');
el.hidden = false;
el.innerHTML = html;
}
function fmt(value, digits) {
if (!isFinite(value)) return '—';
return value.toFixed(digits);
}
var PRESET = {
corn: { f: [50, 86], c: [10, 30] },
soy: { f: [50, ''], c: [10, ''] },
wheat: { f: [32, ''], c: [0, ''] },
alfalfa: { f: [41, ''], c: [5, ''] }
};
document.getElementById('crop').addEventListener('change', function () {
var crop = sel('crop');
if (crop === 'custom' || !PRESET[crop]) return;
var pair = PRESET[crop][sel('units')];
document.getElementById('tbase').value = pair[0];
document.getElementById('tcap').value = pair[1];
});
document.getElementById('units').addEventListener('change', function () {
document.getElementById('crop').dispatchEvent(new Event('change'));
});
document.getElementById('calc-form').addEventListener('submit', function (event) {
event.preventDefault();
var tmax = raw('tmax'), tmin = raw('tmin'), tbase = raw('tbase'), tcap = raw('tcap');
if (!isFinite(tmax) || !isFinite(tmin) || !isFinite(tbase)) {
showResult('<p>Enter Tmax, Tmin, and Tbase.</p>');
return;
}
var tmaxUsed = isFinite(tcap) ? Math.min(tmax, tcap) : tmax;
var tavg = (tmaxUsed + tmin) / 2;
var gdd = Math.max(0, tavg - tbase);
var unit = sel('units') === 'c' ? '°C-days' : '°F-days';
showResult(
'<div>Growing degree days</div><strong>' + fmt(gdd, 1) + '</strong><span> ' + unit + '</span>' +
'<div class="parts"><div>Tmax used = ' + fmt(tmaxUsed, 1) + '</div><div>Tavg = ' + fmt(tavg, 1) + '</div></div>'
);
});
</script>
</body>
</html>
NEW APPS
These are apps made by the community!