Operations, Logistics & Engineering
Daylight Hours (Photoperiod) Formula: Solar Declination & Sunrise-to-Sunset Duration
Calculate astronomical daylight duration N = (24 / PI()) * ACOS(-TAN(phi) * TAN(delta)) for any latitude phi and day-of-year J (1..365) using Cooper’s (1969) / FAO-56 solar declination equation, including 24-hour polar day and 0-hour polar night bounds.
From agronomy & FAO-56 evapotranspiration to solar PV yield: exact astronomical photoperiod N!
In solar-array energy modeling, FAO-56 crop evapotranspiration, ecology, and construction shift planning, astronomical daylight hours N (sunrise-to-sunset geometric photoperiod) depend strictly on geographic latitude phi (-90° South to +90° North) and Julian Day of Year J (1 = Jan 1 to 365 = Dec 31)! Using P. I. Cooper’s (1969, Solar Energy) solar declination equation delta = 23.45° * SIN(RADIANS(360 * (284 + J) / 365)), solar declination swings from +23.45° on Summer Solstice (J = 172, June 21) to -23.45° on Winter Solstice (J = 355, Dec 21)!
The geometric sunset hour angle omega_s satisfies cos(omega_s) = -TAN(RADIANS(phi)) * TAN(RADIANS(delta))! Clamping that product into [-1, +1] handles Arctic/Antarctic midnight sun (cos(omega_s) <= -1 -> omega_s = PI -> 24.00 hours of daylight!) and polar night (cos(omega_s) >= +1 -> omega_s = 0 -> 0.00 hours!) without ever throwing an ACOS #NUM! error! At latitude phi = 40.0° N on Summer Solstice J = 172, geometric daylight N = (24 / PI()) * ACOS(-TAN(40°) * TAN(23.45°)) = 14.91 hours (14h 55m)!
| Location Latitude phi & Day of Year J | Cooper Solar Declination delta (deg) | Geometric Daylight Hours N |
|---|---|---|
| 40.0° N (New York / Madrid), Summer Solstice J = 172 | +23.45° | 14.91 hours (14h 55m) |
| 40.0° N, Winter Solstice J = 355 | -23.45° | 9.09 hours (9h 05m — Symmetrical 24 - 14.91!) |
| 70.0° N (Tromsø, Norway), Summer Solstice J = 172 | +23.45° (-tan*tan = -1.19 <= -1) | 24.00 hours (Polar Midnight Sun!) |
Cooper (1969) Solar Declination Angle delta (Degrees) from Day of Year J (1..366)
Evaluates 23.45 * SIN(RADIANS(360 * (284 + J) / 365)) for Day of Year J in B3.
=IF(OR(ABS(B2) > 90, B3 < 1, B3 > 366), "Invalid Latitude (-90..90) or Day of Year (1..366)", ROUND(23.45 * SIN(RADIANS(360 * (284 + B3) / 365)), 4))Polar-Safe Astronomical Daylight Hours N = (24 / PI()) * ACOS(Clamped -TAN(phi)*TAN(delta))
Clamps -TAN(phi)*TAN(delta) inside [-1, +1] with MAX(-1, MIN(1, ...)) so Arctic/Antarctic latitudes return exact 24.00 h or 0.00 h instead of #NUM!.
=IF(OR(ABS(B2) > 90, B3 < 1, B3 > 366), "Invalid Latitude (-90..90) or Day of Year (1..366)", IF(ABS(B2) = 90, IF(B2 * SIN(RADIANS(360 * (284 + B3) / 365)) > 0, 24, 0), ROUND((24 / PI()) * ACOS(MAX(-1, MIN(1, -TAN(RADIANS(B2)) * TAN(RADIANS(23.45 * SIN(RADIANS(360 * (284 + B3) / 365))))))), 2)))Try the example
Use the original values or change them to test your understanding.