There will be a blue moon tonight, at 3:45 am CDT:
In[]:=
MoonPhaseDate["MonthlyBlueMoon"]
Out[]=
This post will show what this means, and how easy it is to find blue moons, and other special phases of the Moon, with Wolfram Language.
Recent versions of Wolfram Language have added several new functions to find and analyze astronomical events, and some of them are fully dedicated to Earth's Moon. For example, the function NewMoon finds the next new moon:
In[]:=
NewMoon[]
Out[]=
and the function FullMoon finds the next full moon, which happens to be in a few hours:
In[]:=
FullMoon[]
Out[]=
The time from one new moon to the next new moon (or full moon to full moon) is called a "lunation" or "synodic month", and has an average of about 29.5 days:
In[]:=
UnitConvert[Quantity["SynodicMonths"],MixedUnit["DHMS"]]
Out[]=
It can vary a few hours. For example, take all 260 full moons from year 2020 to year 2040:
In[]:=
Length[fullmoons=FindAstroEvent["FullMoon",DateInterval[{{2020},{2040}}]]]
Out[]=
260
We see that during this period the synodic month can vary as much as seven hours from the average, but it is still always between 29 and 30 days:
In[]:=
MinMax[differences=Differences@fullmoons]
Out[]=
,
In[]:=
UnitConvert[%-Quantity["SynodicMonths"],"Hours"]
Out[]=
,
In[]:=
ListPlot[EventSeries[differences,{Most@fullmoons}],Filling->Axis]
Out[]=
Gregorian months can have from 28 to 31 days, and therefore it may happen that there are two full moons in the same month. When that happens we say that the second full moon is a "seasonal full moon". This month of May has two full moons (the option TimeDirection -> -1 indicates we want the previous event):
In[]:=
{FullMoon[TimeDirection->-1],FullMoon[]}
Out[]=
,
Note that if one of the full moons is very close to the beginning or end of the month, then it might fall in a different month for a different time zone, but it is not the case today.
Monthly blue moons happen every two or three years. The next one will happen on the last day of 2028. Here we tell the function MoonPhaseDate to find the next monthly blue moon after two days from today, so that it does not return the one tonight:
In[]:=
MoonPhaseDate[Today+Quantity[2,"Days"],"MonthlyBlueMoon"]
Out[]=
It turns out there is a completely different definition of "blue moon", called "seasonal blue moon". This is the third blue moon in a season with four full moons. The next one will be next year:
In[]:=
MoonPhaseDate["SeasonalBlueMoon"]
Out[]=
Let's check that. Compute the beginning and end of spring next year:
In[]:=
springStart=FindAstroEvent["MarchEquinox",DateObject[{2027}]]
Out[]=
In[]:=
springEnd=FindAstroEvent["JuneSolstice",DateObject[{2027}]]
Out[]=
Select the full moons during that season. We see that the third one is seasonal blue moon we obtained before:
In[]:=
Select[fullmoons,Between[{springStart,springEnd}]]
Out[]=
,,,
There are other full moons with traditional names, and Wolfram Language can easily find them. These are the "harvest moon" (the full moon closest to the September equinox) and the "hunter's moon" (the following full moon):
In[]:=
MoonPhaseDate["HarvestMoon"]
Out[]=
In[]:=
MoonPhaseDate["HuntersMoon"]
Out[]=
CITE THIS NOTEBOOK
CITE THIS NOTEBOOK
Blue Moon tonight at 3:45 am CDT
by Jose Martin-Garcia
Wolfram Community, STAFF PICKS, May 31, 2026
https://community.wolfram.com/groups/-/m/t/3724526
by Jose Martin-Garcia
Wolfram Community, STAFF PICKS, May 31, 2026
https://community.wolfram.com/groups/-/m/t/3724526