Greg_Deckler's avatar
Greg_Deckler
Icon for Community Champion rankCommunity Champion
4 years ago

Julian

Convert dates from Gregorian calendar dates to Julian Days and back again. Based upon Jean Meeus' Astrological Algorithms.

Julian Day = 
    // For converting from Gregorian dates
    // Adapted from Jean Meeus' Astrological Algorithms
    VAR __GregorianDate = MAX('Dates'[Date])
    VAR __GregorianYear = YEAR(__GregorianDate)
    VAR __GregorianMonth = MONTH(__GregorianDate)
    VAR __GregorianDay = DAY(__GregorianDate)
    VAR __Y = IF(__GregorianMonth > 2, __GregorianYear, __GregorianYear - 1)
    VAR __M = IF(__GregorianMonth > 2, __GregorianMonth, __GregorianMonth + 12)
    VAR __D = __GregorianDay
    VAR __A = INT(__Y/100)
    VAR __B = 2 - __A + INT(__A/4)
RETURN
    INT(365.25 * (__Y + 4716)) + INT( 30.6001 * (__M + 1)) + __D + __B -1524.5

 

Gregorian Date = 
    // For converting from Julian Day
    // Adapted from Jean Meeus' Astrologial Algorithms
    VAR __JulianDay = [Julian Day]
    VAR __Z = INT(__JulianDay + .5)
    VAR __F = __JulianDay + .5 - __Z
    VAR __A = 
        IF(
            __Z < 2299161, 
            __Z,
                VAR __alpha = INT( (__Z - 1867216.25) / 36524.25)
            RETURN
                __Z + 1 + __alpha - INT(__alpha/4)
        )
    VAR __B = __A + 1524
    VAR __C = INT( (__B - 122.1)/365.25)
    VAR __D = INT(365.25 * __C)
    VAR __E = INT( (__B - __D)/30.6001)
    VAR __Day = __B - __D - INT(30.6001 * __E)
    VAR __Month = IF(__E < 14, __E - 1, __E - 13)
    VAR __Year = IF(__Month > 2, __C - 4716, __C - 4715)
RETURN
    DATE(__Year,__Month,__Day) + __F

No RepliesBe the first to reply