=====Inverse Julian Date Function=====
**When we have the JD (Julian Date) of an event, we need a tool to translate the JD value into the corresponding calendar date and time. This is the opposite of the Julian Date function.** \\
\\
Go to: **[[Start|START]]** | **[[Programs-Index|PROGRAMS INDEX]]** | **[[Julian-Date|Julian Date Function]]**\\
\\
**NOTE:\\
There is a glitch in the native PHP inverse JD Number functions that returns '0/0/0' as the date ('m/d/Y') when the JD value equates to zero. The function compensates for that glitch and returns the correct origin dates when (JD == 0).**
\\
**The returned date string format will be similar to:** \\
'G 1949-May-20-Fri 08:52:07.713'
**Given the Julian Date value and calendar mode, this function will return the corresponding date and time string.**\\
/*
----------------------------------------------------------------
Given a general JD (Julian Date) and the calendar mode where
'J' = Julian, 'G'=Gregorian, this function will return the
corresponding date and time elements (y-Mmm-d-DoW HH:mm:ss.sss).
Julian Calendar Origin
BC 4713-Jan-01-Mon = JD Number 0 - On the Julian Calendar
Gregorian Calendar Origin
BC 4714-Nov-24-Mon = JD Number 0 - On the Gregorian Calendar
JD = Julian Date
CalMode = 'J' for Julian or 'G' for Gregorian = Default
----------------------------------------------------------------
*/
function Inv_JD ($JD, $CalMode='G')
{
$JD = trim($JD);
$JG = substr(StrToUpper(trim($CalMode)),0,1);
// Compute JD Number from Julian Date.
$JDNum = floor($JD + 0.5);
// Get calendar date elements (m,d,Y) according to calendar mode.
$mdY = ($JG == 'J')? JDtoJulian($JDNum) : JDtoGregorian($JDNum);
list($m,$d,$Y) = Preg_Split("[\/]", $mdY);
// Construct calendar date string.
$DoW = JDDayOfWeek($JDNum, 2);
if ($JG == 'J')
{$Mmm = JDMonthName($JDNum, CAL_MONTH_JULIAN_SHORT);}
else
{$Mmm = JDMonthName($JDNum, CAL_MONTH_GREGORIAN_SHORT);}
$DateStr = "$Y-$Mmm-". SPrintF("%02d", $d) . "-$DoW";
// Handle special case where (JDNum == 0).
if ($JDNum == 0 and $JG == 'J') {$DateStr = '-4713-Jan-01-Mon';}
if ($JDNum == 0 and $JG == 'G') {$DateStr = '-4714-Nov-14-Mon';}
// Parse the time elements (HH,mm,ss):
$hrs = 24*($JD - floor($JD + 0.5) + 0.5);
$HH = floor($hrs);
$min = 60*($hrs - $HH);
$mm = floor($min);
$sec = 60*($min - $mm);
// Account for that blasted (ss == 60) glitch.
$ss = SPrintf("%1.3f", $sec);
if ($ss == 60.0) {$mm += 1; $ss=0;}
if ($mm == 60.0) {$HH += 1; $mm=0;}
// Construct time elements ('HH:mm:ss.sss') string.
$HH = SPrintF("%02d", $HH);
$mm = SPrintF("%02d", $mm);
$ss = SPrintF("%06.3f", $sec);
$TimeStr = "$HH:$mm:$ss";
$JDStr = SPrintF("%1.8f", $JD);
return "$JG $JDStr $DateStr $TimeStr";
}