How the Dates and Times of the Equinoxes and Solstices Were Computed


The following example is based on Equinoxes_and_Solstices_Module.php functions and shows how they may be used to compute the March equinox.

The usage of the following functions is demonstrated:
  • GYmd_HMS_To_JD ($Ymd_HMS)

    This function computes the astronomical JD number for any given Gregorian date and time.


  • Geocentric_Sun ($JD)

    This function computes the apparent geocentric statistics for the sun for any given astronomical JD value corresponding to a given date and time.  In the case of computing the equinoxes and solstices, or the times the seasons begin, only the solar right ascension (RA) and declination coordinates are needed.


  • Lagrange_Interpolate ($XYDataTable, $xArg)

    This function performs Lagrange interpolation within any given 2-column (XYDataTable) for the given value of (xArg).  Here, the function is used to interpolate within a computed data table for the time when a specified coordinate of the sun is reached.  This powerful function can also be used to compute the times of many other astronomical phenomena as well.


  • JD_To_Ymd_HMS ($JD)

    This function is the inverse JD function.  After computing the JD value for some phenomenon, we can then use this function to compute the corresponding date and time (TT) string of the event from the JD value.


  • UTDateTime_To_TZDateTime ($Ymd_UThhmmss, $TZhhmm=0)

    This function can be used to adjust the UT date and time for any given time zone difference.
    Local Time = (UT - TZhhmm).

    In some cases, depending on the time zone difference, this adjustment may result in a different local calendar date for an event.  For example, when it is 03:00 AM (UT) on New Year's Day in London, England, it is 10:00 PM (EST) on New Year's Eve, the previous calendar date, in New York City, USA, where it is 5 hours behind UT.



March Equinox Computation Example

The astronomical seasons have nothing to do with the weather itself.  The times that they begin are based only on the times that the sun reaches certain apparent geocentric coordinates on the celestial sphere and thus are a purely mathematical convention according to the following table.
March equinox     : Geocentric Sun reaches 0 degrees declination
June solstice     : Geocentric Sun reaches 6 hours right ascension (90 degrees)
September equinox : Geocentric Sun reaches 0 degrees declination
December solstice : Geocentric Sun reaches 18 hours right ascension (270 degrees)
The moment the sun reaches the apparent geocentric equatorial declination of 0 degrees is taken as the moment of the equinox.  It is both the moment that astronomical spring in the northern hemisphere begins and the moment that autumn begins in the southern hemisphere at the same time.

For example, in the year, 2018, the March equinox occurs at
20180320 16:17:10 TT (UT + 00:00)

or, in New York City, USA, at
20180320 11:17:10, in local time zone (UT - 05:00)

This example shows how it is done within the Equinoxes_and_Solstices_Module.php module.  There are functions to compute each of the equinoxes and solstices for any given time zone.

We will assume that the March equinox occurs on or around March 20th, say March 20th ±3 days, or March 17th to March 23rd, or within a span of exactly 7 days or 1 week centering on March 20th.

Using the VSOP87 theory, we compute a table consisting of the apparent geocentric declinations of the sun (in degrees) vs the JD12 values for each date from March 17th to March 23rd

The following PHP code computes the required declination vs JD12 table that is used for the subsequent interpolation.
$JD12Middle = GYmd_HMS_To_JD($Y . "0320 12");

$Decl_vs_JD12_Table = "";

for ($JD12 = $JD12Middle-3;   $JD12 <= $JD12Middle+3;   $JD12++)
    {
     list($RAHrs, $DeclDeg) = preg_split("[ ]", Geocentric_Sun($JD12));

     $Decl_vs_JD12_Table .= (sprintf("%+1.10f", $DeclDeg) . "$JD12\n");
    }
The above code generates the following table, where the middle (4th) table row corresponds to March 20th at 12h TT.
$Decl_vs_JD12_Table =
"
-1.2569836757 2458195
-0.8614859607 2458196
-0.4659879167 2458197
-0.0705950970 2458198
+0.3245868996 2458199
+0.7194523768 2458200
+1.1138956515 2458201
";
Using the computed table as the first argument of the Lagrange interpolation function, we interpolate the JD (right column) value for the moment of the equinox when the declination equates to 0 (zero) degrees, the second argument.
$JDofEquinox  = Lagrange_Interpolate ($Decl_vs_JD12_Table, 0);
Here, the JD number for the moment the sun reaches declination 0° works out to:
$JDofEquinox = 2458198.1785926

Now we call the inverse JD number function to compute the corresponding integer-encoded date and time (TT) of the equinox, resolved to the nearest second in time zone 00 (Greenwich).
$Ymd_HMSTZ00 = JD_To_Ymd_HMS ($JDofEquinox);
This returns the integer-encoded date and time string for universal time zone 00, as:
$Ymd_HMSTZ00 = "20180320 16:17:10"
=
2018 March 20 at 16:17:10 TT
Then, we adjust for the given local time zone difference for New York City, USA ($TZhm = "-05:00")
$Ymd_HMSTT = UTDateTime_To_TZDateTime ($Ymd_HMSTZ00, $TZhm);
This returns the final local date/time string for the March equinox for the given date and time zone, as:
20180320 11:17:10


The same method can be used to compute the dates and times of the other equinoxes and solstices as well by simply changing a few variables.

The functions used to perform the above computations are all contained in the module:
Equinoxes_and_Solstices_Module.php.

© Jay Tanner - 2018