A Julian and Gregorian Calculator using AutoIt

I know that there is a Julian Day Converter that has been around for years. It, however, is no longer supported. The window can sometimes be a little messy to re-size and it is expressed by dd/mm/yyyy not mm/dd/yyyy for which I am more used to. Well, here is my attempt at a calculator using AutoIt and Koda.

This calculator calculates the Gregorian calendar for all AD dates to Julian and Modified Julian Days. It also calculates Julian to Gregorian. I have verified the dates as far back as 1/1/1500 and they check out against the references provided in the code and in a reference provided at the bottom of this article, totaling over three sources. Interestingly, the existing Julian Day Calculator differs in results by 10 days and are confirmed against U.S. Naval Observatory (“USNO”).

jdcg

To use, type in the month, day, and year and press calculate; or type the Julian day and press calculate to calculate the Gregorian date.

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Julian / Gregorian Calculator v2 (June 28, 2012)", 434, 186, 231, 126)
$Month = GUICtrlCreateInput("Month", 32, 26, 41, 21)
$Day = GUICtrlCreateInput("Day", 80, 26, 41, 21)
$Year = GUICtrlCreateInput("Year", 128, 26, 41, 21)
$Julian_Day = GUICtrlCreateInput("", 280, 26, 121, 21)
$Modified_Julian_Day = GUICtrlCreateInput("", 280, 51, 121, 21)
$greg_Day = GUICtrlCreateInput("", 280, 103, 121, 21)
$jd_input = GUICtrlCreateInput("Julian", 32, 103, 80, 21)
$Calculate = GUICtrlCreateButton("Calculate", 32, 48, 75, 25, 0)
$greg_calc = GUICtrlCreateButton("Calculate", 32, 125, 75, 25, 0)
$Label1 = GUICtrlCreateLabel("Julian Day", 224, 26, 53, 17)
$Label2 = GUICtrlCreateLabel("Modified Julian Day", 182, 53, 96, 17)
$Group1 = GUICtrlCreateGroup("Gregorian to Julian", 16, 8, 401, 75)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Julian to Gregorian", 16, 85, 401, 75)
$Label0 = GUICtrlCreateLabel("Gregorian Date", 203, 105, 77, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Label3 = GUICtrlCreateLabel("Copyright © 2012", 80, 166, 100, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlSetColor(-1, 0x646464)
$Label4 = GUICtrlCreateLabel('it.megocollector.com', 165, 166, 100, 17)
GUICtrlSetCursor(-1, 0)
GUICtrlSetColor(-1, 0x0000FF)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlSetTip(-1, 'https://it.megocollector.com')
$Label5 = GUICtrlCreateLabel(". All rights reserved.", 264, 166, 100, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlSetColor(-1, 0x646464)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

        Case $Calculate
            If GUICtrlRead($Month) = '' Or GUICtrlRead($Day) = '' Or GUICtrlRead($Year) = '' Then
                MsgBox(0, "Input Error", "Please enter valid values for Month, Day, and Year.")
                ContinueLoop
            EndIf

            ; For all AD dates in the Gregorian calendar.
            $jd = (Int(367 * GUICtrlRead($Year) - Int(7 * (GUICtrlRead($Year) + Int((GUICtrlRead($Month) + 9) / 12)) / 4) - Int(3 * (Int((GUICtrlRead($Year) + (GUICtrlRead($Month) - 9) / 7) / 100) + 1) / 4) + Int((275 * GUICtrlRead($Month)) / 9) + GUICtrlRead($Day) + 1721028.5) + 1)
            $mjd = ($jd - 2400001) ; mjd = jd - 2400001

            GUICtrlSetData($Julian_Day, string($jd))
            GUICtrlSetData($Modified_Julian_Day, string($mjd))

        Case $greg_calc
            If GUICtrlRead($jd_input) = '' Then
                MsgBox(0, "Input Error", "Please enter a Julian Day.")
                ContinueLoop
            EndIf

            $j = GUICtrlRead($jd_input) - 1721119
            $y = Int((4 * $j - 1) / 146097)
            $j = 4 * $j - 1 - 146097 * $y
            $d = Int($j / 4)
            $j = Int((4 * $d + 3) / 1461)
            $d = 4 * $d + 3 - 1461 * $j
            $d = Int(($d + 4) / 4)
            $m = Int((5 * $d - 3) / 153)
            $d = 5 * $d - 3 - 153 * $m
            $d = Int(($d + 5) / 5)
            $y = 100 * $y + $j

            If $m < 10 Then
                $m = $m + 3
            Else
                $m = $m - 9
                $y = $y + 1
            EndIf

            $gstring = $m & "/" & $d & "/" & $y
            GUICtrlSetData($greg_Day, string($gstring))

        Case $Label4
            ShellExecute("https://it.megocollector.com")

    EndSwitch
WEnd

Sources Referenced in the code.
http://www.julian-date.com/