Method
How an eclipse is computed here
Every number on this surface comes out of one shared astronomy module and none of it is looked up. This page says exactly what is computed, how close it is, and the two things it does not do.
Why the calendar cannot tell you
The Moon is full once a synodic month, twelve or thirteen times a year, and it is eclipsed about twice. The difference between those two cases is not in the calendar and it is not in the phase — it is latitude. The Moon’s orbit is tilted just over five degrees to Earth’s, so at most full moons it passes above or below Earth’s shadow rather than through it.
This matters more than it sounds. Everything most astrology software computes about the Moon is longitude — its sign, its nakshatra, its lord. Predicting an eclipse from longitude alone is not approximate, it is impossible: it would call every full moon an eclipse. So the engine behind this page computes the Moon’s ecliptic latitude as well, from the same series, to about 0.02° — which matters because the threshold that separates a total eclipse from a near miss sits inside half a degree.
The shadow is a real cone with a real size
Earth’s umbra — the dark shadow, where the Sun is completely blocked — is about 0.73° in radius at the Moon’s distance. The penumbra, where the Sun is only partly blocked, is about 1.30°. The Moon itself is about 0.26° in radius. Those numbers are why a total lunar eclipse can last an hour and a half: the umbra is about 2.7 Moon-widths across, so the Moon has room to sit entirely inside it with time to spare.
The test for an eclipse is the angular separation between the Moon’s centre and the antisolar point — the axis of Earth’s shadow, which sits exactly opposite the Sun. Longitude alone would fire every full moon. Latitude alone would fire twice a month at the nodes. It is both, together, at opposition.
Both magnitudes follow the standard definition: how far the shadow’s edge has crossed the Moon’s disc, measured in units of the Moon’s diameter. An umbral magnitude of 1.000 or more means the disc is entirely inside the umbra.
The correction that changes verdicts
Those radii are means, and mean radii are not good enough. The umbra’s size swings by several percent with the Moon’s and Earth’s distances, and “total or not” is decided inside that margin — a perigee full moon is both bigger and deeper in a smaller shadow. Checked against the published catalogue, mean radii produced no false eclipses but five wrong verdicts, every one of them at a boundary: 21 May 2021 came out partial at magnitude 0.885 when it was total at 1.009, and 19 November 2021 came out total at 1.115 when it was partial at 0.974.
So the true distances are computed for every instant, and the shadow radii with them. The umbra is then enlarged by 2%, the customary allowance for Earth’s atmosphere — and that is not a fudge factor, it is the same bent, reddened light that makes a totally eclipsed Moon copper instead of black. Sunlight grazing the edge of the Earth is refracted inward and lands on it, reddened by exactly the process that reddens a sunset. During a total lunar eclipse the Moon is lit by every sunrise and sunset on Earth at once.
Finding when, rather than what
The shared module answers one question — what is the Moon doing at this instant. Everything on this surface asks the other one, so the search is this surface’s own, and it is three nested solves on functions that are each well behaved on the interval they are handed:
- The full moons. The Moon’s distance from opposition grows about 12.19° a day and wraps once a month, so a sign change across a one-day step is a full moon — exactly one per month, none missed and none counted twice. Bisected to zero.
- Greatest eclipse, which is not opposition. The verdict is decided by distance from the shadow’s axis, and that minimum falls minutes away from the longitude alignment because the Moon is moving in latitude at the same time. Found by ternary search.
- The contacts. Each stage is the separation crossing a shadow radius, and the separation is monotone either side of the minimum, so each is one bisection. The radii are re-read at every step rather than fixed at greatest, because that is the correction described above.
How accurate, stated as a number
Magnitudes agree with the published catalogue to about 0.01. Greatest eclipse and the contact times agree to within a few minutes, and there is a known bias in one direction inside that: no ΔT is applied. The orbital series want Terrestrial Time and are handed Universal Time, which differ by about 70 seconds at present, so every instant on this surface runs roughly a minute late. That is why nothing here prints seconds. It is a real limit and correcting it is a change to the shared engine rather than to this page.
Accuracy here is checked against an independent authority and never against a competitor. Two eclipse pages that agree with each other have demonstrated agreement, not correctness — the same trap as two calendars that both read the same timezone database.
The two things this does not do
It does not do solar eclipses, and the name says so rather than burying it. A solar eclipse is a genuinely different problem: the Moon’s shadow falls on the Earth, so the answer depends on where you are and not only on when — a total eclipse for one town is a partial one two hundred miles away and nothing at all four hundred miles further. That needs Besselian elements and a shadow path, which the shared engine does not have yet. Listing solar eclipses it could not properly compute is the one thing this network is built not to do.
It does not tell you the sky is doing something to you. An eclipse is a shadow. What it means, if it means anything, is a different subject with a different discipline and its own page elsewhere.
Method · Sun and Moon from Meeus’ abridged VSOP87 and ELP2000 series (longitude, latitude and distance), umbra and penumbra from the Moon’s horizontal parallax with the customary 2% atmospheric enlargement, magnitudes in units of the Moon’s diameter. No ΔT is applied, so the times run about a minute late. Computed in your browser; nothing is fetched and nothing is logged.