How we calculate frost dates, growing zones and planting dates

Data and versions

  • Frost and freeze odds, growing season, growing degree days: NOAA National Centers for Environmental Information (NCEI), U.S. Climate Normals 1991–2020, annual/seasonal and daily by-station files. Variables: ANN-TMIN-PRBLST, PRBFST and PRBGSL at 36°F, 32°F and 28°F, probability levels 10–90%; ANN-GRDD-BASE50; DLY-TMIN-NORMAL; DLY-GRDD-BASE50.
  • Hardiness zones: USDA Plant Hardiness Zone Map 2023 and 2012 ZIP-code tables, produced by the PRISM Group at Oregon State University.
  • Which ZIP codes are in a city: U.S. Census Bureau 2020 ZCTA-to-place relationship file. ZCTAs approximate USPS ZIP codes.
  • City-center elevation: USGS Elevation Point Query Service (3DEP).
  • Crop timing rules: land-grant university extension publications (listed below).

Normals cover 1991–2020 and stay the same from year to year. That's why our pages say “for the 2027 season, based on 1991–2020 normals” instead of putting a year in the title.

What the probabilities mean

  • Last spring frost, P%: the chance (P%) that a night at or below the threshold still comes after this date. The 50% date is the “typical” date. It's the median: in half of years the last frost comes later, and in half it comes earlier. The 10% date is the “safer” date, since only 1 year in 10 has a later freeze. The 30% date sits in between, and some websites use it as their headline date.
  • First fall frost, P%: the chance (P%) that the first night at or below the threshold has already come by this date. The 10% date marks the early end of the risk.
  • Growing season, P%: the chance (P%) that the frost-free season lasts at least this many days. NOAA calculates this on its own, so it isn't simply the first-frost date minus the last-frost date.
  • Thresholds: 36°F (frost possible on plants), 32°F (freeze; our headline) and 28°F (hard freeze).
  • “Remaining risk today” comes straight from the nine NOAA probability levels. We show it as the range between the two nearest levels (for example, “between 10% and 20%”) and don't interpolate.

How we match a city to a weather station

  1. Find every NOAA normals station within 40 km of the city center.
  2. A station is eligible if it has complete frost statistics (all 81 ANN-TMIN-PRB{LST,FST,GSL}-T{36,32,28}FP{10..90} values present, no M/V/Y/Z measurement flag, every completeness flag in {S,R}), sits within 25 miles of the city center, and its elevation is within 500 ft of the city center's.
  3. We use the nearest eligible station.
  4. Confidence: High = within 10 mi, elevation difference ≤ 300 ft and at least 20 years of data; Medium = eligible but misses one of those; Low = no eligible station.
  5. We ask search engines not to index pages with Low confidence or incomplete frost statistics.

NOAA completeness flags, quoted from NOAA (Normals Calculation Methodology 2020, Table 2): S = “Standard - meets WMO standards for data availability for 24 or more years”; R = “Representative - meets WMO standards for data availability for 10 or more years, but not for 80% completeness; gaps in monthly temperature or precipitation are filled in”. So an S station can also rest on fewer than 30 years (24 to 29). We accept both S and R, and each page shows the flag and the year count.

Where freezes are rare, NOAA leaves some dates out on purpose. NOAA's frost dates describe years “provided the minimum temperature is reached at least once during the cold season”, and NOAA adds: “In order to provide frost-freeze date normals, the probability of occurrence must be at least 10%; otherwise the values are shown as the special value -6666, indicating that the minimum temperature is too rare (or never occurs) to compute frost-freeze date normals.” We still accept such a station if every missing value is explained this way. On those pages we show NOAA's yearly chance of a 32°F night instead of a date, and we don't build a planting calendar when a 32°F night comes in fewer than half of years.

Hardiness zones

Zones come from the PRISM/OSU ZIP-code tables. Each city page lists every ZIP that overlaps the city, with its 2023 and 2012 zones. We mark a ZIP “mostly in city” when at least half of its land area is inside the city limits (Census 2020). A few ZIPs, mostly PO boxes, appear in only one of the two tables; those show as “not listed”.

Credit: PRISM Group, Oregon State University, https://prism.oregonstate.edu, accessed 2026-10-08. The datasets underlying the USDA maps are owned by Oregon State University and may be freely reproduced and redistributed under OSU's terms.

Disclaimer: we show zone values exactly as published in the ZIP tables and do not publish a zone map. This site is not the official USDA Plant Hardiness Zone Map; see planthardiness.ars.usda.gov. If we ever add maps drawn from the PRISM GIS data, OSU's terms require displaying the USDA-ARS and OSU logos on unaltered maps, or a prominent “not the official USDA map” disclaimer without the logos if the data are altered.

Crop timing rules and sources

CSU Extension writes its spring rules relative to “the average last spring frost.” We use the NOAA 50% date as that average. We also apply each rule to the 30% and 10% dates, so you can pick how much risk you're willing to take. Every rule below was checked against the saved source text on 2026-10-08.

CropGroup / ruleStart indoorsDays to harvestMin. soilOther
Tomatoes Very tender (warm season): “Typically 2+ weeks after the average last spring frost date.” 5–7 weeks 65 (from transplant) 50°F Nights > 52°F at transplant. Fruit set suffers when nights fall below 55°F.
Peppers Very tender (warm season): “Typically 2+ weeks after the average last spring frost date.” 6–8 weeks 70 (from transplant) 60°F Fruit set suffers when nights fall below 55°F.
Potatoes Semi-hardy (cool season): “As early as 0-2 weeks before the date of the average last spring frost.” – 125 (from planting) 45°F
Onions (dry, from sets) Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” – 110 (from planting) 35°F
Peas Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” – 65 (from seeding) 40°F Fall count-back.
Lettuce (leaf) Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” – 60 (from seeding) 35°F Fall count-back.
Carrots Semi-hardy (cool season): “As early as 0-2 weeks before the date of the average last spring frost.” – 70 (from seeding) 40°F Fall count-back.
Beans (snap) Tender (warm season): “From seed: around the date of the average last spring frost” – 60 (from seeding) 55°F Fall count-back incl. frost-tender factor.
Summer squash Tender (warm season): “From seed: around the date of the average last spring frost” – 50 (from seeding) 60°F Fall count-back incl. frost-tender factor.
Broccoli Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” 5–7 weeks 65 (from transplant) 40°F Fall count-back.
Cabbage Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” 5–7 weeks 85 (from transplant) 40°F Fall count-back.
Cauliflower Semi-hardy (cool season): “As early as 0-2 weeks before the date of the average last spring frost.” 5–7 weeks – 40°F
Kohlrabi Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” – 50 (from seeding) 40°F Fall count-back.
Green onions Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” – 60 (from seeding) 35°F Fall count-back.
Radishes Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” – 30 (from seeding) 40°F Fall count-back.
Spinach Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” – 40 (from seeding) 40°F Fall count-back.
Turnips Hardy (cool season): “As early as 2-4 weeks before the date of the average last spring frost.” – 50 (from seeding) 40°F Fall count-back.
Beets Semi-hardy (cool season): “As early as 0-2 weeks before the date of the average last spring frost.” – 60 (from seeding) 40°F Fall count-back.
Swiss chard Semi-hardy (cool season): “As early as 0-2 weeks before the date of the average last spring frost.” – 60 (from seeding) 40°F Fall count-back.
Parsnips Semi-hardy (cool season): “As early as 0-2 weeks before the date of the average last spring frost.” – 70 (from seeding) 35°F
Sweet corn Tender (warm season): “From seed: around the date of the average last spring frost” – – 50°F
Cucumbers Tender (warm season): “From seed: around the date of the average last spring frost” – 55 (from seeding) 60°F Fall count-back incl. frost-tender factor.
Eggplant Very tender (warm season): “Typically 2+ weeks after the average last spring frost date.” 6–9 weeks 60 (from transplant) 60°F
Cantaloupe Very tender (warm season): “Typically 2+ weeks after the average last spring frost date.” – 85 (from seeding) 60°F
Watermelon Very tender (warm season): “Typically 2+ weeks after the average last spring frost date.” – 85 (from seeding) 60°F
Winter squash Very tender (warm season): “Typically 2+ weeks after the average last spring frost date.” – 100 (from seeding) 60°F
Garlic Fixed window 10-01 to 10-14 (“garlic crop should be planted before October 15th”; “for planting in early October”) – – –

Sources

Night-temperature dates use NOAA's smoothed daily normal minimum (DLY-TMIN-NORMAL) and mark the first day it reaches the threshold. That describes an average night, not a guarantee; many nights around that date are colder. Where CSU sets a night condition for transplanting (tomatoes: nights above 52°F), that day is a floor: transplant dates start no earlier than the first day the average nightly low (NOAA daily normal) is above the threshold, even if the frost rule alone would allow an earlier date. NOAA doesn't publish soil-temperature normals, so we show CSU's minimum soil temperatures instead of soil-based dates.

What is generated automatically

A script reads or calculates every number on city pages from the data above. No model writes free text. The interpretive sentences come from a fixed set of condition rules. A sentence appears only when the city's data meets its condition, and its numbers are filled in from that data. For example, the “long tail” sentence shows up only when the safer 10% date is 14 or more days after the typical date. Every sentence on a page carries its rule ID in the HTML (data-rule). Pages are generated automatically, with no ongoing editorial review of each page. Samples of the generated pages are spot-checked against other published frost-date sources.

Known limitations

  • Normals are long-term odds, not forecasts. Check the local forecast before you plant.
  • Microclimates (low spots, cold-air drainage, urban heat, south walls) can move your yard's frost dates days or even weeks away from the station's.
  • Some stations' statistics rest on fewer than 30 years (both NOAA flags S and R allow this); we show the year count.
  • Readings come from the station thermometer, which sits above the ground. Plants can still get frost while it reads above 32°F, which is why we also show 36°F (frost possible on plants).
  • CSU's planting rules are written for Colorado. For other states we apply CSU's frost-relative rules to that city's NOAA dates and label them as CSU (Colorado) rules. Colorado-only items (the fixed garlic window and the Mother's Day custom) appear only on Colorado pages. We'll switch to a state's own extension guidance where we find a quotable rule.
  • A ZIP lookup returns one zone per ZIP, but a large ZIP can span two zones.

Example page: Denver, CO frost dates. Who runs this site: About.