Arte SheetsLearn. Try. Understand.

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 JCooper 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.

Further reading