This program demonstrates a process by which we may compute the equinoxes and solstices. In this case, we will compute the date and time (TT) of March equinox for a random Gregorian year.
To build a program around the equinoxes and solstices module, we simply include the module at the beginning of the program. // Attach the equinoxes and solstices functions module. include("Equinoxes_and_Solstices_Module_v0.php");For the example, we will select a random Gregorian year in the range from 1600 to 2400 AD. In this case, the random year is `2153` .
// Select random Gregorian year for example in range 1800 to 2400. $Y = mt_rand(1800, 2400); // Selected random year = 2153We will construct a table centering on March 20 ^{th} of the example year (`2153` ). To do this, we first compute the JD12 value for March 20^{th} (JD12Central) of the year `2153` .
The JD12 range of the table will span a 7-day period starting on `JD12Start = JD12Central−3` and ending on `JD12End = JD12Central+3`
// Compute the JD12 value for central date, 2153 March 20, at 12:00 TT $JD12Central = Ymd_HMS_To_JD($Y . "0320 12"); // = 2507506Now that we have the `JD12Central` value for our table (`2507506` ), we can construct the 7-day table of geocentric solar declinations vs. JD12 values from 3 days before to 3 days after this `JD12Central` value.
// Create 7-day solar declination vs JD12 table centered on JD12Central $DataTable = ""; for ($JD12 = $JD12Central-3; $JD12 <= $JD12Central+3; $JD12++) { list($RAHrs, $declination) = preg_split("[ ]", Geocentric_Sun ($JD12)); $declination = sprintf("%+1.10f", $declination); $DataTable .= "$declination $JD12\n"; }The above loop generates the following DataTable structure.
$DataTable = " -1.1489152729 2507503 -0.7532075462 2507504 -0.3574901363 2507505 +0.0381309849 2507506 +0.4335498232 2507507 +0.8286605541 2507508 +1.2233576384 2507509 ";Given the above data table, we next call the LaGrange interpolation function to compute the JD value for the moment when the apparent geocentric solar declination equates to zero. // Interpolate JD of event = Moment when solar declination == 0 $JDofEvent = LaGrange_Interpolate($DataTable, 0); // = 2507505.9035994This returns the interpolated JD value for the moment when the solar declination equates to zero. In this example, `JDofEvent = 2507505.9035994`
We can then call the inverse JD number function to compute the corresponding integer-encoded date and time string. $Ymd_HMSTT = JD_To_Ymd_HMS($JDofEvent); // = "21530320 09:41:11"Now we can tidy up the date string by replacing the returned month number sub-string, "03", with "March". // Construct final output date from integer-encoded date/time string. $Y_Mmm_dd_HMS = "$Y March " . substr($Ymd_HMSTT, 6, strlen($Ymd_HMSTT));This finally gives us the date and time (TT) of the March equinox in Gregorian year `2153` .
$Y_Mmm_dd_HMS = "2153 March 20 09:41:11"; |