How the Dates and Times of the Equinoxes and Solstices Were ComputedThe 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:
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 20^{th}, say March 20^{th} ±3 days, or March 17^{th} to March 23^{rd}, or within a span of exactly 7 days or 1 week centering on March 20^{th}. 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 17^{th} to March 23^{rd}. 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 = $JD12Middle3; $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 (4^{th}) table row corresponds to March 20^{th} 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 integerencoded 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 integerencoded date and time string for universal time zone 00, as: $Ymd_HMSTZ00 = "20180320 16:17:10" = 2018 March 20 at 16:17:10 TTThen, 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
