Home › Methodology
How the calendars are made
Every date on this site is computed from climate data and a short list of crop rules. This page sets out the sources, the method, how well it holds up against weather-station records, and where it can be wrong.
Sources and licences
| What | Source | Licence |
|---|---|---|
| US frost and freeze dates (10 %, 50 %, 90 % probability, 0 °C / 32 °F) | NOAA National Centers for Environmental Information, U.S. Climate Normals 1991–2020, annual/seasonal normals, nearest first-order station to each city | US Government work, public domain |
| Canadian frost dates | Environment and Climate Change Canada, Canadian Climate Normals 1981–2010, main airport station | Open Government Licence – Canada |
| Monthly average high, low and rain, all cities | TerraClimate 1991–2020 climatology (Abatzoglou, Dobrowski, Parks & Hegewisch 2018, Scientific Data 5:170191), about 4 km grid | CC0 (public domain) |
| Coldest night of the year, US cities (hardiness zones) | NOAA GHCN-Daily, same stations, 1991–2020 | US Government work, public domain |
| Frost dates for checking the model in the UK, Ireland and Australia | NOAA GHCN-Daily station minima, 1991–2020. Used only to test the method; no station data is republished. | Used for validation only |
| Photos | Wikimedia Commons, each credited on the page that shows it | Public domain, CC0, CC BY or CC BY-SA |
| Crop rules | Written for this site from general horticultural guidance (seed-packet and extension-service figures), kept conservative | — |
Frost dates
US and Canada: we show the national weather services’ own figures for the nearest main station: the date by which half of years have had their last spring frost (and the first autumn one), plus the one-year-in-ten dates. A station can sit a few kilometres from the city centre, and cities, valleys and coasts all shift frost by days or weeks.
UK, Ireland, Australia and New Zealand: no open, machine-readable frost normals exist, so we estimate them. From TerraClimate’s twelve monthly average lows we draw a smooth daily curve (a four-harmonic fit that keeps every monthly average), then find where it crosses a threshold: the average low on the night of the 50 % frost date. A frost needs one night well below average, and nights vary more where the climate is continental, so the threshold rises with the annual range of monthly lows:
threshold = 4.70 °C + 0.0155 × (warmest-month low − coldest-month low)
The coefficients were fitted on 88 stations. If the average low never drops to the threshold, the place is treated as having no regular frost. One-in-ten dates for estimated cities add the typical spread seen in the NOAA and ECCC data (16 days in spring, 14 in autumn).
How accurate is it?
Each station was scored with the threshold refitted without that station, so these are out-of-sample errors.
- Average error 8.3 days; half of dates within 7 days, 80 % within 12 days, 90 % within 17 days (132 spring and autumn dates).
- US stations (NOAA): average 8.5 days. Canada (ECCC): 6.2 days. UK, Ireland and Australia: 9.4 days.
- The largest misses are in the US Southeast, where the model puts the last frost two to four weeks early (Atlanta, Austin): cold snaps there are bigger than the climate’s range suggests. That is why US pages use NOAA’s own dates.
- Models that also used latitude or the day–night temperature range fitted North America better but put the UK and Ireland’s last frost three to six weeks early, so we kept the simpler one.
| Station | Model: last / first frost | Published or observed | Difference (days) | Source |
|---|---|---|---|---|
| Boston, Massachusetts | Apr 25 / Oct 24 | Apr 4 / Nov 9 | +21 / -16 | NOAA 1991-2020 |
| Minneapolis, Minnesota | Apr 26 / Oct 14 | Apr 23 / Oct 18 | +3 / -4 | NOAA 1991-2020 |
| Atlanta, Georgia | Mar 2 / Nov 21 | Mar 24 / Nov 8 | -22 / +13 | NOAA 1991-2020 |
| Denver, Colorado | May 6 / Oct 7 | May 4 / Oct 8 | +2 / -1 | NOAA 1991-2020 |
| Phoenix, Arizona | No regular frost | No regular frost | agree | NOAA 1991-2020 |
| Seattle, Washington | Apr 8 / Nov 10 | Mar 13 / Nov 17 | +26 / -7 | NOAA 1991-2020 |
| Toronto | Apr 27 / Oct 26 | May 4 / Oct 9 | -7 / +17 | ECCC 1981-2010 |
| Vancouver | Mar 29 / Nov 13 | Mar 27 / Nov 5 | +2 / +8 | ECCC 1981-2010 |
| Calgary | May 27 / Sep 13 | May 26 / Sep 10 | +1 / +3 | ECCC 1981-2010 |
| London (Heathrow) | Apr 4 / Nov 18 | Mar 27 / Nov 16 | +8 / +2 | GHCN-Daily 1991-2020 (computed) |
| Edinburgh (Royal Botanic Garden) | Apr 24 / Nov 2 | Apr 17 / Oct 30 | +7 / +3 | GHCN-Daily 1991-2020 (computed) |
| Belfast (Stormont) | Apr 26 / Oct 30 | Mar 29 / Dec 2 | +28 / -33 | GHCN-Daily 1991-2020 (computed) |
| Dublin (Phoenix Park) | Apr 20 / Nov 7 | Apr 19 / Nov 5 | +1 / +2 | GHCN-Daily 1991-2020 (computed) |
| Melbourne Airport | No regular frost | No regular frost | agree | GHCN-Daily 1991-2020 (computed) |
| Canberra Airport | Sep 27 / May 1 | Oct 9 / Apr 29 | -12 / +2 | GHCN-Daily 1991-2020 (computed) |
| Hobart Airport | Aug 7 / Jun 23 | Jul 19 / Jul 3 | +19 / -10 | GHCN-Daily 1991-2020 (computed) |
| Sydney (Observatory Hill) | No regular frost | No regular frost | agree | GHCN-Daily 1991-2020 (computed) |
All 88 stations
| Station | Model | Published / observed | Difference |
|---|---|---|---|
| New York, New York | Apr 10 / Nov 10 | Mar 30 / Nov 20 | +11 / -10 |
| Boston, Massachusetts | Apr 25 / Oct 24 | Apr 4 / Nov 9 | +21 / -16 |
| Philadelphia, Pennsylvania | Apr 9 / Nov 5 | Apr 2 / Nov 10 | +7 / -5 |
| Pittsburgh, Pennsylvania | Apr 19 / Oct 24 | Apr 18 / Oct 28 | +1 / -4 |
| Buffalo, New York | Apr 30 / Oct 28 | Apr 24 / Oct 26 | +6 / +2 |
| Burlington, Vermont | May 6 / Oct 20 | Apr 29 / Oct 15 | +7 / +5 |
| Portland, Maine | May 5 / Oct 14 | Apr 26 / Oct 15 | +9 / -1 |
| Baltimore, Maryland | Apr 1 / Nov 9 | Mar 24 / Nov 21 | +8 / -12 |
| Washington, District of Columbia | Apr 3 / Nov 6 | Mar 24 / Nov 18 | +10 / -12 |
| Chicago, Illinois | Apr 22 / Oct 24 | Apr 11 / Oct 31 | +11 / -7 |
| Detroit, Michigan | Apr 22 / Oct 26 | Apr 21 / Oct 31 | +1 / -5 |
| Cleveland, Ohio | Apr 20 / Oct 28 | Apr 8 / Nov 12 | +12 / -15 |
| Columbus, Ohio | Apr 14 / Oct 24 | Apr 18 / Oct 27 | -4 / -3 |
| Cincinnati, Ohio | Apr 9 / Oct 28 | Apr 16 / Oct 25 | -7 / +3 |
| Indianapolis, Indiana | Apr 11 / Oct 26 | Apr 15 / Oct 26 | -4 / +0 |
| Milwaukee, Wisconsin | Apr 28 / Oct 19 | Apr 19 / Oct 29 | +9 / -10 |
| Madison, Wisconsin | May 3 / Oct 14 | May 1 / Oct 10 | +2 / +4 |
| Minneapolis, Minnesota | Apr 26 / Oct 14 | Apr 23 / Oct 18 | +3 / -4 |
| Des Moines, Iowa | Apr 17 / Oct 19 | Apr 18 / Oct 20 | -1 / -1 |
| St. Louis, Missouri | Mar 31 / Nov 2 | Apr 8 / Oct 26 | -8 / +7 |
| Kansas City, Missouri | Apr 4 / Oct 30 | Apr 4 / Nov 2 | +0 / -3 |
| Omaha, Nebraska | Apr 16 / Oct 19 | Apr 18 / Oct 21 | -2 / -2 |
| Fargo, North Dakota | May 7 / Oct 5 | May 10 / Sep 30 | -3 / +5 |
| Atlanta, Georgia | Mar 2 / Nov 21 | Mar 24 / Nov 8 | -22 / +13 |
| Charlotte, North Carolina | Mar 13 / Nov 12 | Mar 30 / Nov 3 | -17 / +9 |
| Raleigh, North Carolina | Mar 19 / Nov 11 | Mar 31 / Nov 4 | -12 / +7 |
| Richmond, Virginia | Mar 29 / Nov 6 | Apr 3 / Nov 4 | -5 / +2 |
| Nashville, Tennessee | Mar 21 / Nov 6 | Mar 31 / Nov 3 | -10 / +3 |
| Memphis, Tennessee | Mar 8 / Nov 20 | Mar 16 / Nov 16 | -8 / +4 |
| Louisville, Kentucky | Mar 30 / Nov 4 | Apr 3 / Nov 3 | -4 / +1 |
| Birmingham, Alabama | Mar 7 / Nov 15 | Mar 21 / Nov 11 | -14 / +4 |
| Charleston, South Carolina | Feb 7 / Dec 26 | Feb 4 / Dec 30 | +3 / -4 |
| Little Rock, Arkansas | Mar 6 / Nov 17 | Mar 21 / Nov 10 | -15 / +7 |
| New Orleans, Louisiana | No regular frost | No regular frost | agree: no regular frost |
| Jacksonville, Florida | No regular frost | No regular frost | agree: no regular frost |
| Orlando, Florida | No regular frost | No regular frost | agree: no regular frost |
| Tampa, Florida | No regular frost | No regular frost | agree: no regular frost |
| Miami, Florida | No regular frost | No regular frost | agree: no regular frost |
| Houston, Texas | No regular frost | Jan 30 / Dec 28 | model says no regular frost |
| Dallas, Texas | Feb 11 / Dec 6 | Mar 2 / Nov 29 | -19 / +7 |
| Austin, Texas | Jan 20 / Dec 24 | Feb 20 / Dec 3 | -31 / +21 |
| San Antonio, Texas | No regular frost | Feb 20 / Dec 3 | model says no regular frost |
| Oklahoma City, Oklahoma | Mar 16 / Nov 10 | Apr 4 / Nov 2 | -19 / +8 |
| Tulsa, Oklahoma | Mar 20 / Nov 8 | Mar 31 / Nov 4 | -11 / +4 |
| Denver, Colorado | May 6 / Oct 7 | May 4 / Oct 8 | +2 / -1 |
| Salt Lake City, Utah | Apr 22 / Oct 16 | Apr 8 / Oct 31 | +14 / -15 |
| Boise, Idaho | Apr 27 / Oct 12 | Apr 24 / Oct 21 | +3 / -9 |
| Billings, Montana | May 13 / Sep 27 | May 4 / Oct 7 | +9 / -10 |
| Albuquerque, New Mexico | Apr 15 / Oct 24 | Apr 6 / Nov 3 | +9 / -10 |
| El Paso, Texas | Mar 8 / Nov 14 | Mar 2 / Nov 20 | +6 / -6 |
| Phoenix, Arizona | No regular frost | No regular frost | agree: no regular frost |
| Tucson, Arizona | Jan 27 / Dec 9 | Feb 5 / Dec 9 | -9 / +0 |
| Las Vegas, Nevada | Feb 9 / Nov 24 | Jan 24 / Dec 10 | +16 / -16 |
| Los Angeles, California | No regular frost | No regular frost | agree: no regular frost |
| San Diego, California | No regular frost | No regular frost | agree: no regular frost |
| San Francisco, California | No regular frost | No regular frost | agree: no regular frost |
| San Jose, California | No regular frost | No regular frost | agree: no regular frost |
| Sacramento, California | Jan 13 / Dec 8 | No regular frost | model predicts a frost season of 37 days |
| Fresno, California | Jan 28 / Nov 25 | Jan 14 / Dec 14 | +14 / -19 |
| Portland, Oregon | Apr 5 / Nov 1 | Mar 13 / Nov 19 | +23 / -18 |
| Seattle, Washington | Apr 8 / Nov 10 | Mar 13 / Nov 17 | +26 / -7 |
| Spokane, Washington | May 4 / Sep 30 | Apr 26 / Oct 15 | +8 / -15 |
| Anchorage, Alaska | May 13 / Sep 22 | May 1 / Sep 29 | +12 / -7 |
| Honolulu, Hawaii | No regular frost | No regular frost | agree: no regular frost |
| Toronto | Apr 27 / Oct 26 | May 4 / Oct 9 | -7 / +17 |
| Ottawa | May 5 / Oct 14 | May 7 / Oct 2 | -2 / +12 |
| Montreal | May 2 / Oct 16 | Apr 29 / Oct 9 | +3 / +7 |
| Vancouver | Mar 29 / Nov 13 | Mar 27 / Nov 5 | +2 / +8 |
| Calgary | May 27 / Sep 13 | May 26 / Sep 10 | +1 / +3 |
| Edmonton | May 19 / Sep 17 | May 10 / Sep 19 | +9 / -2 |
| Winnipeg | May 15 / Sep 29 | May 24 / Sep 22 | -9 / +7 |
| Halifax | May 14 / Oct 22 | May 9 / Oct 17 | +5 / +5 |
| London (Heathrow) | Apr 4 / Nov 18 | Mar 27 / Nov 16 | +8 / +2 |
| Midlands (Wellesbourne) | Apr 21 / Nov 8 | May 3 / Nov 2 | -12 / +6 |
| Bradford | Apr 19 / Nov 7 | Apr 16 / Nov 4 | +3 / +3 |
| Edinburgh (Royal Botanic Garden) | Apr 24 / Nov 2 | Apr 17 / Oct 30 | +7 / +3 |
| Belfast (Stormont) | Apr 26 / Oct 30 | Mar 29 / Dec 2 | +28 / -33 |
| Dublin (Phoenix Park) | Apr 20 / Nov 7 | Apr 19 / Nov 5 | +1 / +2 |
| Melbourne Airport | No regular frost | No regular frost | agree: no regular frost |
| Melbourne (Essendon) | No regular frost | Jul 10 / Jul 7 | model says no regular frost |
| Canberra Airport | Sep 27 / May 1 | Oct 9 / Apr 29 | -12 / +2 |
| Hobart (Ellerslie Rd) | Aug 25 / Jun 7 | No regular frost | model predicts a frost season of 80 days |
| Hobart Airport | Aug 7 / Jun 23 | Jul 19 / Jul 3 | +19 / -10 |
| Adelaide Airport | No regular frost | No regular frost | agree: no regular frost |
| Melbourne (Laverton) | No regular frost | Aug 7 / Jul 7 | model says no regular frost |
| Perth Airport | No regular frost | No regular frost | agree: no regular frost |
| Brisbane Aero | No regular frost | No regular frost | agree: no regular frost |
| Sydney (Observatory Hill) | No regular frost | No regular frost | agree: no regular frost |
Positive differences mean the model’s date is later than the record. A later spring date and an earlier autumn date are the cautious direction for a gardener.
Hardiness zones
Zones follow the USDA definition: the average of each year’s coldest night, in 10 °F bands split into a and b. For US cities we compute it from the NOAA station’s daily records, 1991–2020. Elsewhere we estimate it as the coldest month’s average low minus a drop that grows with continentality (fitted on the US stations). Tested out of sample on 64 US stations: average error 1.6 °C; 36 of 64 land in the same half-zone and 58 within one half-zone. Estimated zones are marked as estimates.
Crop windows
For each city we build a daily curve of average high, low and mean temperature, then test every day of the year as a possible sowing or planting-out date. A day passes when:
- The ground is ready: the week’s mean temperature (a stand-in for soil temperature) is at least the crop’s minimum, and highs are not scorching.
- Frost allows it: tender crops wait until a week or two after the average last frost; hardy crops may go in several weeks before it.
- It has time to finish: days to harvest are stretched in cool weather in proportion to growing degree-days (above 10 °C for warm-season crops, 4 °C for cool-season ones). Tender crops must give one to two weeks of picking before the first autumn frost or before autumn means fall below 12 °C (9 °C for pumpkins, which finish ripening off the vine); hardy crops must mature before frost has gone on longer than they stand. Where the frost season is shorter than the frost a hardy crop shrugs off, frost does not limit it.
- It is warm enough to grow, and for tender crops no night in the period averages below 6 °C.
- Heat doesn’t spoil it: average highs while it matures stay under the crop’s limit (lettuce and spinach bolt, peas and beans drop flowers), and for tomatoes, peppers and beans, nights are not so warm that fruit fails to set.
Indoor sowing is the crop’s raising time before the start of each outdoor window. Harvest is each passing date plus its (stretched) days to maturity, over the picking period. Garlic is handled separately: it is planted as autumn cools (mean below 14 °C), needs about six weeks under 10 °C, and is lifted as early summer warms.
| Crop | Frost | Start indoors | Plant | Soil (mean) | Heat limit (highs) | Days |
|---|---|---|---|---|---|---|
| Tomato | tender | 6–8 wk | 10 d after last frost | 15°C59°F | 35°C95°F | 70 |
| Pepper | tender | 8–10 wk | 14 d after last frost | 17°C63°F | 36°C97°F | 75 |
| Eggplant (aubergine) | tender | 8–10 wk | 14 d after last frost | 18°C64°F | 35°C95°F | 80 |
| Cucumber | tender | 3–4 wk | 10 d after last frost | 16°C61°F | 35°C95°F | 55 |
| Zucchini (courgette) | tender | 3–4 wk | 7 d after last frost | 15°C59°F | 36°C97°F | 50 |
| Pumpkin and winter squash | tender | 3–4 wk | 10 d after last frost | 15°C59°F | 36°C97°F | 100 |
| Watermelon | tender | 3–4 wk | 14 d after last frost | 18°C64°F | – | 85 |
| Sweet corn | tender | – | 7 d after last frost | 13°C55°F | 36°C97°F | 80 |
| Green beans | tender | – | 7 d after last frost | 15°C59°F | 34°C93°F | 55 |
| Peas | hardy | – | from 42 d before | 6°C43°F | 25°C77°F | 65 |
| Lettuce | half | 4–5 wk | from 28 d before | 5°C41°F | 27°C81°F | 50 |
| Spinach | hardy | – | from 42 d before | 4°C39°F | 26°C79°F | 45 |
| Kale | hardy | 4–6 wk | from 35 d before | 5°C41°F | 31°C88°F | 60 |
| Cabbage | hardy | 5–7 wk | from 28 d before | 7°C45°F | 29°C84°F | 75 |
| Broccoli | half | 5–7 wk | from 21 d before | 7°C45°F | 29°C84°F | 65 |
| Carrots | hardy | – | from 21 d before | 7°C45°F | 33°C91°F | 70 |
| Beets (beetroot) | hardy | – | from 21 d before | 7°C45°F | 33°C91°F | 60 |
| Radishes | hardy | – | from 35 d before | 5°C41°F | 27°C81°F | 28 |
| Onions | hardy | 8–10 wk | from 28 d before | 6°C43°F | 35°C95°F | 100 |
| Garlic | hardy | – | autumn | 0°C32°F | – | 240 |
| Potatoes | half | – | from 14 d before | 8°C46°F | 34°C93°F | 95 |
| Swiss chard | half | – | from 14 d before | 8°C46°F | 33°C91°F | 55 |
| Basil | tender | 5–6 wk | 14 d after last frost | 17°C63°F | – | 30 |
| Cilantro (coriander) | half | – | from 21 d before | 7°C45°F | 27°C81°F | 40 |
| Parsley | hardy | 6–8 wk | from 21 d before | 8°C46°F | 33°C91°F | 75 |
Limits
- These are climate averages: any one year can be two or three weeks early or late. Watch the forecast before setting out tender plants.
- Your garden is not the weather station. Low ground collects frost; city centres, walls and coasts hold off frost.
- Varieties differ a lot. Early tomatoes, bolt-resistant lettuce and short-day onions all shift the windows.
- Rain and irrigation are not modelled: in dry climates everything here assumes you water.
- We don’t cover growing under cover (greenhouses, polytunnels, cold frames), which widens every window.
Climate data fetched 2026-10-26; NOAA normals fetched 2026-10-26. Something wrong for your city? See About.