# gregdate

`function gregdate( julianday ) --> greg`

## Description

Converts an Julian Day number to a table containing the Gregorian date values year, month and day.

## Parameters

julianday

A julian day number as integer. A float value will be truncated.

## Return Values

greg

A table containing the Gregorian date values year, month and day.

• The year as a number.

• The month as a number from 1(January) to 12(December).

• The day as a number from 1 to 31

## Code

```--ZFUNC-gregdate-v1
local function gregdate( julianday ) --> greg
local greg = {}

local a = 0
if ( julianday >= 2299161 ) then
g = math.floor( ( julianday - 1867216.25 ) / 36524.25 )
a = julianday + 1 + g - math.floor( g / 4 )
else
a = julianday
end

local b = a + 1524
local c = math.floor( ( b - 122.1 ) / 365.25 )
local d = math.floor( 365.25 * c )
local e = math.floor( ( b - d ) / 30.6001 )

greg.day = b - d - math.floor( 30.6001 * e )

if e < 14 then
greg.month = e - 1
else
greg.month = e - 13
end

if greg.month > 2 then
greg.year = c - 4716
else
greg.year = c - 4715
end

return greg
end

return gregdate```

## Examples

```local t = require( "taptest" )
local gregdate = require( "gregdate" )

-- should work like the inverse from julian_day
greg = gregdate( 1721424 )
t( greg.year, 1 )
t( greg.month, 1 )
t( greg.day, 1 )

greg = gregdate( 1842713 )
t( greg.year, 333 )
t( greg.month, 1 )
t( greg.day, 27 )

greg = gregdate( 2299160 )
t( greg.year, 1582 )
t( greg.month, 10 )
t( greg.day, 4 )

greg = gregdate( 2299161 )
t( greg.year, 1582 )
t( greg.month, 10 )
t( greg.day, 15 )

greg = gregdate( 2415021 )
t( greg.year, 1900 )
t( greg.month, 1 )
t( greg.day, 1 )

greg = gregdate( 2447893 )
t( greg.year, 1990 )
t( greg.month, 1 )
t( greg.day, 1 )

greg = gregdate( 2451545 )
t( greg.year, 2000 )
t( greg.month, 1 )
t( greg.day, 1 )

greg = gregdate( 2453750 )
t( greg.year, 2006 )
t( greg.month, 1 )
t( greg.day, 14 )

greg = gregdate( 2455281 )
t( greg.year, 2010 )
t( greg.month, 3 )
t( greg.day, 25 )

greg = gregdate( 2456798 )
t( greg.year, 2014 )
t( greg.month, 5 )
t( greg.day, 20 )

t()```